# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
# Generated file, DO NOT EDIT
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------------------------

from msrest.serialization import Model


class FeedBatchData(Model):
    """
    :param data:
    :type data: :class:`FeedBatchOperationData <azure.devops.v5_1.packaging.models.FeedBatchOperationData>`
    :param operation:
    :type operation: object
    """

    _attribute_map = {
        'data': {'key': 'data', 'type': 'FeedBatchOperationData'},
        'operation': {'key': 'operation', 'type': 'object'}
    }

    def __init__(self, data=None, operation=None):
        super(FeedBatchData, self).__init__()
        self.data = data
        self.operation = operation


class FeedBatchOperationData(Model):
    """
    """

    _attribute_map = {
    }

    def __init__(self):
        super(FeedBatchOperationData, self).__init__()


class FeedChange(Model):
    """
    A container that encapsulates the state of the feed after a create, update, or delete.

    :param change_type: The type of operation.
    :type change_type: object
    :param feed: The state of the feed after a after a create, update, or delete operation completed.
    :type feed: :class:`Feed <azure.devops.v5_1.packaging.models.Feed>`
    :param feed_continuation_token: A token that identifies the next change in the log of changes.
    :type feed_continuation_token: long
    :param latest_package_continuation_token: A token that identifies the latest package change for this feed.  This can be used to quickly determine if there have been any changes to packages in a specific feed.
    :type latest_package_continuation_token: long
    """

    _attribute_map = {
        'change_type': {'key': 'changeType', 'type': 'object'},
        'feed': {'key': 'feed', 'type': 'Feed'},
        'feed_continuation_token': {'key': 'feedContinuationToken', 'type': 'long'},
        'latest_package_continuation_token': {'key': 'latestPackageContinuationToken', 'type': 'long'}
    }

    def __init__(self, change_type=None, feed=None, feed_continuation_token=None, latest_package_continuation_token=None):
        super(FeedChange, self).__init__()
        self.change_type = change_type
        self.feed = feed
        self.feed_continuation_token = feed_continuation_token
        self.latest_package_continuation_token = latest_package_continuation_token


class FeedChangesResponse(Model):
    """
    A result set containing the feed changes for the range that was requested.

    :param _links:
    :type _links: :class:`ReferenceLinks <azure.devops.v5_1.packaging.models.ReferenceLinks>`
    :param count: The number of changes in this set.
    :type count: int
    :param feed_changes: A container that encapsulates the state of the feed after a create, update, or delete.
    :type feed_changes: list of :class:`FeedChange <azure.devops.v5_1.packaging.models.FeedChange>`
    :param next_feed_continuation_token: When iterating through the log of changes this value indicates the value that should be used for the next continuation token.
    :type next_feed_continuation_token: long
    """

    _attribute_map = {
        '_links': {'key': '_links', 'type': 'ReferenceLinks'},
        'count': {'key': 'count', 'type': 'int'},
        'feed_changes': {'key': 'feedChanges', 'type': '[FeedChange]'},
        'next_feed_continuation_token': {'key': 'nextFeedContinuationToken', 'type': 'long'}
    }

    def __init__(self, _links=None, count=None, feed_changes=None, next_feed_continuation_token=None):
        super(FeedChangesResponse, self).__init__()
        self._links = _links
        self.count = count
        self.feed_changes = feed_changes
        self.next_feed_continuation_token = next_feed_continuation_token


class FeedCore(Model):
    """
    An object that contains all of the settings for a specific feed.

    :param allow_upstream_name_conflict: OBSOLETE: If set, the feed will allow upload of packages that exist on the upstream
    :type allow_upstream_name_conflict: bool
    :param capabilities: Supported capabilities of a feed.
    :type capabilities: object
    :param fully_qualified_id: This will either be the feed GUID or the feed GUID and view GUID depending on how the feed was accessed.
    :type fully_qualified_id: str
    :param fully_qualified_name: Full name of the view, in feed@view format.
    :type fully_qualified_name: str
    :param id: A GUID that uniquely identifies this feed.
    :type id: str
    :param is_read_only: If set, all packages in the feed are immutable.  It is important to note that feed views are immutable; therefore, this flag will always be set for views.
    :type is_read_only: bool
    :param name: A name for the feed. feed names must follow these rules: <list type="bullet"><item><description> Must not exceed 64 characters </description></item><item><description> Must not contain whitespaces </description></item><item><description> Must not start with an underscore or a period </description></item><item><description> Must not end with a period </description></item><item><description> Must not contain any of the following illegal characters: <![CDATA[ @, ~, ;, {, }, \, +, =, <, >, |, /, \\, ?, :, &, $, *, \", #, [, ] ]]></description></item></list>
    :type name: str
    :param project: The project that this feed is associated with.
    :type project: :class:`ProjectReference <azure.devops.v5_1.packaging.models.ProjectReference>`
    :param upstream_enabled: OBSOLETE: This should always be true.  Setting to false will override all sources in UpstreamSources.
    :type upstream_enabled: bool
    :param upstream_sources: A list of sources that this feed will fetch packages from.  An empty list indicates that this feed will not search any additional sources for packages.
    :type upstream_sources: list of :class:`UpstreamSource <azure.devops.v5_1.packaging.models.UpstreamSource>`
    :param view: Definition of the view.
    :type view: :class:`FeedView <azure.devops.v5_1.packaging.models.FeedView>`
    :param view_id: View Id.
    :type view_id: str
    :param view_name: View name.
    :type view_name: str
    """

    _attribute_map = {
        'allow_upstream_name_conflict': {'key': 'allowUpstreamNameConflict', 'type': 'bool'},
        'capabilities': {'key': 'capabilities', 'type': 'object'},
        'fully_qualified_id': {'key': 'fullyQualifiedId', 'type': 'str'},
        'fully_qualified_name': {'key': 'fullyQualifiedName', 'type': 'str'},
        'id': {'key': 'id', 'type': 'str'},
        'is_read_only': {'key': 'isReadOnly', 'type': 'bool'},
        'name': {'key': 'name', 'type': 'str'},
        'project': {'key': 'project', 'type': 'ProjectReference'},
        'upstream_enabled': {'key': 'upstreamEnabled', 'type': 'bool'},
        'upstream_sources': {'key': 'upstreamSources', 'type': '[UpstreamSource]'},
        'view': {'key': 'view', 'type': 'FeedView'},
        'view_id': {'key': 'viewId', 'type': 'str'},
        'view_name': {'key': 'viewName', 'type': 'str'}
    }

    def __init__(self, allow_upstream_name_conflict=None, capabilities=None, fully_qualified_id=None, fully_qualified_name=None, id=None, is_read_only=None, name=None, project=None, upstream_enabled=None, upstream_sources=None, view=None, view_id=None, view_name=None):
        super(FeedCore, self).__init__()
        self.allow_upstream_name_conflict = allow_upstream_name_conflict
        self.capabilities = capabilities
        self.fully_qualified_id = fully_qualified_id
        self.fully_qualified_name = fully_qualified_name
        self.id = id
        self.is_read_only = is_read_only
        self.name = name
        self.project = project
        self.upstream_enabled = upstream_enabled
        self.upstream_sources = upstream_sources
        self.view = view
        self.view_id = view_id
        self.view_name = view_name


class FeedPermission(Model):
    """
    Permissions for a feed.

    :param display_name: Display name for the identity.
    :type display_name: str
    :param identity_descriptor: Identity associated with this role.
    :type identity_descriptor: :class:`str <azure.devops.v5_1.packaging.models.str>`
    :param identity_id: Id of the identity associated with this role.
    :type identity_id: str
    :param role: The role for this identity on a feed.
    :type role: object
    """

    _attribute_map = {
        'display_name': {'key': 'displayName', 'type': 'str'},
        'identity_descriptor': {'key': 'identityDescriptor', 'type': 'str'},
        'identity_id': {'key': 'identityId', 'type': 'str'},
        'role': {'key': 'role', 'type': 'object'}
    }

    def __init__(self, display_name=None, identity_descriptor=None, identity_id=None, role=None):
        super(FeedPermission, self).__init__()
        self.display_name = display_name
        self.identity_descriptor = identity_descriptor
        self.identity_id = identity_id
        self.role = role


class FeedRetentionPolicy(Model):
    """
    Retention policy settings.

    :param age_limit_in_days: This attribute is deprecated and is not honoured by retention
    :type age_limit_in_days: int
    :param count_limit: Maximum versions to preserve per package and package type.
    :type count_limit: int
    :param days_to_keep_recently_downloaded_packages: Number of days to preserve a package version after its latest download.
    :type days_to_keep_recently_downloaded_packages: int
    """

    _attribute_map = {
        'age_limit_in_days': {'key': 'ageLimitInDays', 'type': 'int'},
        'count_limit': {'key': 'countLimit', 'type': 'int'},
        'days_to_keep_recently_downloaded_packages': {'key': 'daysToKeepRecentlyDownloadedPackages', 'type': 'int'}
    }

    def __init__(self, age_limit_in_days=None, count_limit=None, days_to_keep_recently_downloaded_packages=None):
        super(FeedRetentionPolicy, self).__init__()
        self.age_limit_in_days = age_limit_in_days
        self.count_limit = count_limit
        self.days_to_keep_recently_downloaded_packages = days_to_keep_recently_downloaded_packages


class FeedUpdate(Model):
    """
    Update a feed definition with these new values.

    :param allow_upstream_name_conflict: If set, the feed will allow upload of packages that exist on the upstream
    :type allow_upstream_name_conflict: bool
    :param badges_enabled: If set, this feed supports generation of package badges.
    :type badges_enabled: bool
    :param default_view_id: The view that the feed administrator has indicated is the default experience for readers.
    :type default_view_id: str
    :param description: A description for the feed.  Descriptions must not exceed 255 characters.
    :type description: str
    :param hide_deleted_package_versions: If set, feed will hide all deleted/unpublished versions
    :type hide_deleted_package_versions: bool
    :param id: A GUID that uniquely identifies this feed.
    :type id: str
    :param name: A name for the feed. feed names must follow these rules: <list type="bullet"><item><description> Must not exceed 64 characters </description></item><item><description> Must not contain whitespaces </description></item><item><description> Must not start with an underscore or a period </description></item><item><description> Must not end with a period </description></item><item><description> Must not contain any of the following illegal characters: <![CDATA[ @, ~, ;, {, }, \, +, =, <, >, |, /, \\, ?, :, &, $, *, \", #, [, ] ]]></description></item></list>
    :type name: str
    :param upstream_enabled: OBSOLETE: If set, the feed can proxy packages from an upstream feed
    :type upstream_enabled: bool
    :param upstream_sources: A list of sources that this feed will fetch packages from.  An empty list indicates that this feed will not search any additional sources for packages.
    :type upstream_sources: list of :class:`UpstreamSource <azure.devops.v5_1.packaging.models.UpstreamSource>`
    """

    _attribute_map = {
        'allow_upstream_name_conflict': {'key': 'allowUpstreamNameConflict', 'type': 'bool'},
        'badges_enabled': {'key': 'badgesEnabled', 'type': 'bool'},
        'default_view_id': {'key': 'defaultViewId', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'hide_deleted_package_versions': {'key': 'hideDeletedPackageVersions', 'type': 'bool'},
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'upstream_enabled': {'key': 'upstreamEnabled', 'type': 'bool'},
        'upstream_sources': {'key': 'upstreamSources', 'type': '[UpstreamSource]'}
    }

    def __init__(self, allow_upstream_name_conflict=None, badges_enabled=None, default_view_id=None, description=None, hide_deleted_package_versions=None, id=None, name=None, upstream_enabled=None, upstream_sources=None):
        super(FeedUpdate, self).__init__()
        self.allow_upstream_name_conflict = allow_upstream_name_conflict
        self.badges_enabled = badges_enabled
        self.default_view_id = default_view_id
        self.description = description
        self.hide_deleted_package_versions = hide_deleted_package_versions
        self.id = id
        self.name = name
        self.upstream_enabled = upstream_enabled
        self.upstream_sources = upstream_sources


class FeedView(Model):
    """
    A view on top of a feed.

    :param _links: Related REST links.
    :type _links: :class:`ReferenceLinks <azure.devops.v5_1.packaging.models.ReferenceLinks>`
    :param id: Id of the view.
    :type id: str
    :param name: Name of the view.
    :type name: str
    :param type: Type of view.
    :type type: object
    :param url: Url of the view.
    :type url: str
    :param visibility: Visibility status of the view.
    :type visibility: object
    """

    _attribute_map = {
        '_links': {'key': '_links', 'type': 'ReferenceLinks'},
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'object'},
        'url': {'key': 'url', 'type': 'str'},
        'visibility': {'key': 'visibility', 'type': 'object'}
    }

    def __init__(self, _links=None, id=None, name=None, type=None, url=None, visibility=None):
        super(FeedView, self).__init__()
        self._links = _links
        self.id = id
        self.name = name
        self.type = type
        self.url = url
        self.visibility = visibility


class GlobalPermission(Model):
    """
    Permissions for feed service-wide operations such as the creation of new feeds.

    :param identity_descriptor: Identity of the user with the provided Role.
    :type identity_descriptor: :class:`str <azure.devops.v5_1.packaging.models.str>`
    :param identity_id: IdentityId corresponding to the IdentityDescriptor
    :type identity_id: str
    :param role: Role associated with the Identity.
    :type role: object
    """

    _attribute_map = {
        'identity_descriptor': {'key': 'identityDescriptor', 'type': 'str'},
        'identity_id': {'key': 'identityId', 'type': 'str'},
        'role': {'key': 'role', 'type': 'object'}
    }

    def __init__(self, identity_descriptor=None, identity_id=None, role=None):
        super(GlobalPermission, self).__init__()
        self.identity_descriptor = identity_descriptor
        self.identity_id = identity_id
        self.role = role


class JsonPatchOperation(Model):
    """
    The JSON model for a JSON Patch operation

    :param from_: The path to copy from for the Move/Copy operation.
    :type from_: str
    :param op: The patch operation
    :type op: object
    :param path: The path for the operation. In the case of an array, a zero based index can be used to specify the position in the array (e.g. /biscuits/0/name). The "-" character can be used instead of an index to insert at the end of the array (e.g. /biscuits/-).
    :type path: str
    :param value: The value for the operation. This is either a primitive or a JToken.
    :type value: object
    """

    _attribute_map = {
        'from_': {'key': 'from', 'type': 'str'},
        'op': {'key': 'op', 'type': 'object'},
        'path': {'key': 'path', 'type': 'str'},
        'value': {'key': 'value', 'type': 'object'}
    }

    def __init__(self, from_=None, op=None, path=None, value=None):
        super(JsonPatchOperation, self).__init__()
        self.from_ = from_
        self.op = op
        self.path = path
        self.value = value


class MinimalPackageVersion(Model):
    """
    Core data about any package, including its id and version information and basic state.

    :param direct_upstream_source_id: Upstream source this package was ingested from.
    :type direct_upstream_source_id: str
    :param id: Id for the package.
    :type id: str
    :param is_cached_version: [Obsolete] Used for legacy scenarios and may be removed in future versions.
    :type is_cached_version: bool
    :param is_deleted: True if this package has been deleted.
    :type is_deleted: bool
    :param is_latest: True if this is the latest version of the package by package type sort order.
    :type is_latest: bool
    :param is_listed: (NuGet Only) True if this package is listed.
    :type is_listed: bool
    :param normalized_version: Normalized version using normalization rules specific to a package type.
    :type normalized_version: str
    :param package_description: Package description.
    :type package_description: str
    :param publish_date: UTC Date the package was published to the service.
    :type publish_date: datetime
    :param storage_id: Internal storage id.
    :type storage_id: str
    :param version: Display version.
    :type version: str
    :param views: List of views containing this package version.
    :type views: list of :class:`FeedView <azure.devops.v5_1.packaging.models.FeedView>`
    """

    _attribute_map = {
        'direct_upstream_source_id': {'key': 'directUpstreamSourceId', 'type': 'str'},
        'id': {'key': 'id', 'type': 'str'},
        'is_cached_version': {'key': 'isCachedVersion', 'type': 'bool'},
        'is_deleted': {'key': 'isDeleted', 'type': 'bool'},
        'is_latest': {'key': 'isLatest', 'type': 'bool'},
        'is_listed': {'key': 'isListed', 'type': 'bool'},
        'normalized_version': {'key': 'normalizedVersion', 'type': 'str'},
        'package_description': {'key': 'packageDescription', 'type': 'str'},
        'publish_date': {'key': 'publishDate', 'type': 'iso-8601'},
        'storage_id': {'key': 'storageId', 'type': 'str'},
        'version': {'key': 'version', 'type': 'str'},
        'views': {'key': 'views', 'type': '[FeedView]'}
    }

    def __init__(self, direct_upstream_source_id=None, id=None, is_cached_version=None, is_deleted=None, is_latest=None, is_listed=None, normalized_version=None, package_description=None, publish_date=None, storage_id=None, version=None, views=None):
        super(MinimalPackageVersion, self).__init__()
        self.direct_upstream_source_id = direct_upstream_source_id
        self.id = id
        self.is_cached_version = is_cached_version
        self.is_deleted = is_deleted
        self.is_latest = is_latest
        self.is_listed = is_listed
        self.normalized_version = normalized_version
        self.package_description = package_description
        self.publish_date = publish_date
        self.storage_id = storage_id
        self.version = version
        self.views = views


class Package(Model):
    """
    A package, which is a container for one or more package versions.

    :param _links: Related REST links.
    :type _links: :class:`ReferenceLinks <azure.devops.v5_1.packaging.models.ReferenceLinks>`
    :param id: Id of the package.
    :type id: str
    :param is_cached: Used for legacy scenarios and may be removed in future versions.
    :type is_cached: bool
    :param name: The display name of the package.
    :type name: str
    :param normalized_name: The normalized name representing the identity of this package within its package type.
    :type normalized_name: str
    :param protocol_type: Type of the package.
    :type protocol_type: str
    :param star_count: [Obsolete] - this field is unused and will be removed in a future release.
    :type star_count: int
    :param url: Url for this package.
    :type url: str
    :param versions: All versions for this package within its feed.
    :type versions: list of :class:`MinimalPackageVersion <azure.devops.v5_1.packaging.models.MinimalPackageVersion>`
    """

    _attribute_map = {
        '_links': {'key': '_links', 'type': 'ReferenceLinks'},
        'id': {'key': 'id', 'type': 'str'},
        'is_cached': {'key': 'isCached', 'type': 'bool'},
        'name': {'key': 'name', 'type': 'str'},
        'normalized_name': {'key': 'normalizedName', 'type': 'str'},
        'protocol_type': {'key': 'protocolType', 'type': 'str'},
        'star_count': {'key': 'starCount', 'type': 'int'},
        'url': {'key': 'url', 'type': 'str'},
        'versions': {'key': 'versions', 'type': '[MinimalPackageVersion]'}
    }

    def __init__(self, _links=None, id=None, is_cached=None, name=None, normalized_name=None, protocol_type=None, star_count=None, url=None, versions=None):
        super(Package, self).__init__()
        self._links = _links
        self.id = id
        self.is_cached = is_cached
        self.name = name
        self.normalized_name = normalized_name
        self.protocol_type = protocol_type
        self.star_count = star_count
        self.url = url
        self.versions = versions


class PackageChange(Model):
    """
    A single change to a feed's packages.

    :param package: Package that was changed.
    :type package: :class:`Package <azure.devops.v5_1.packaging.models.Package>`
    :param package_version_change: Change that was performed on a package version.
    :type package_version_change: :class:`PackageVersionChange <azure.devops.v5_1.packaging.models.PackageVersionChange>`
    """

    _attribute_map = {
        'package': {'key': 'package', 'type': 'Package'},
        'package_version_change': {'key': 'packageVersionChange', 'type': 'PackageVersionChange'}
    }

    def __init__(self, package=None, package_version_change=None):
        super(PackageChange, self).__init__()
        self.package = package
        self.package_version_change = package_version_change


class PackageChangesResponse(Model):
    """
    A set of change operations to a feed's packages.

    :param _links: Related REST links.
    :type _links: :class:`ReferenceLinks <azure.devops.v5_1.packaging.models.ReferenceLinks>`
    :param count: Number of changes in this batch.
    :type count: int
    :param next_package_continuation_token: Token that should be used in future calls for this feed to retrieve new changes.
    :type next_package_continuation_token: long
    :param package_changes: List of changes.
    :type package_changes: list of :class:`PackageChange <azure.devops.v5_1.packaging.models.PackageChange>`
    """

    _attribute_map = {
        '_links': {'key': '_links', 'type': 'ReferenceLinks'},
        'count': {'key': 'count', 'type': 'int'},
        'next_package_continuation_token': {'key': 'nextPackageContinuationToken', 'type': 'long'},
        'package_changes': {'key': 'packageChanges', 'type': '[PackageChange]'}
    }

    def __init__(self, _links=None, count=None, next_package_continuation_token=None, package_changes=None):
        super(PackageChangesResponse, self).__init__()
        self._links = _links
        self.count = count
        self.next_package_continuation_token = next_package_continuation_token
        self.package_changes = package_changes


class PackageDependency(Model):
    """
    A dependency on another package version.

    :param group: Dependency package group (an optional classification within some package types).
    :type group: str
    :param package_name: Dependency package name.
    :type package_name: str
    :param version_range: Dependency package version range.
    :type version_range: str
    """

    _attribute_map = {
        'group': {'key': 'group', 'type': 'str'},
        'package_name': {'key': 'packageName', 'type': 'str'},
        'version_range': {'key': 'versionRange', 'type': 'str'}
    }

    def __init__(self, group=None, package_name=None, version_range=None):
        super(PackageDependency, self).__init__()
        self.group = group
        self.package_name = package_name
        self.version_range = version_range


class PackageFile(Model):
    """
    A package file for a specific package version, only relevant to package types that contain multiple files per version.

    :param children: Hierarchical representation of files.
    :type children: list of :class:`PackageFile <azure.devops.v5_1.packaging.models.PackageFile>`
    :param name: File name.
    :type name: str
    :param protocol_metadata: Extended data unique to a specific package type.
    :type protocol_metadata: :class:`ProtocolMetadata <azure.devops.v5_1.packaging.models.ProtocolMetadata>`
    """

    _attribute_map = {
        'children': {'key': 'children', 'type': '[PackageFile]'},
        'name': {'key': 'name', 'type': 'str'},
        'protocol_metadata': {'key': 'protocolMetadata', 'type': 'ProtocolMetadata'}
    }

    def __init__(self, children=None, name=None, protocol_metadata=None):
        super(PackageFile, self).__init__()
        self.children = children
        self.name = name
        self.protocol_metadata = protocol_metadata


class PackageMetrics(Model):
    """
    All metrics for a certain package id

    :param download_count: Total count of downloads per package id.
    :type download_count: float
    :param download_unique_users: Number of downloads per unique user per package id.
    :type download_unique_users: float
    :param last_downloaded: UTC date and time when package was last downloaded.
    :type last_downloaded: datetime
    :param package_id: Package id.
    :type package_id: str
    """

    _attribute_map = {
        'download_count': {'key': 'downloadCount', 'type': 'float'},
        'download_unique_users': {'key': 'downloadUniqueUsers', 'type': 'float'},
        'last_downloaded': {'key': 'lastDownloaded', 'type': 'iso-8601'},
        'package_id': {'key': 'packageId', 'type': 'str'}
    }

    def __init__(self, download_count=None, download_unique_users=None, last_downloaded=None, package_id=None):
        super(PackageMetrics, self).__init__()
        self.download_count = download_count
        self.download_unique_users = download_unique_users
        self.last_downloaded = last_downloaded
        self.package_id = package_id


class PackageMetricsQuery(Model):
    """
    Query to get package metrics

    :param package_ids: List of package ids
    :type package_ids: list of str
    """

    _attribute_map = {
        'package_ids': {'key': 'packageIds', 'type': '[str]'}
    }

    def __init__(self, package_ids=None):
        super(PackageMetricsQuery, self).__init__()
        self.package_ids = package_ids


class PackageVersion(MinimalPackageVersion):
    """
    A specific version of a package.

    :param direct_upstream_source_id: Upstream source this package was ingested from.
    :type direct_upstream_source_id: str
    :param id: Id for the package.
    :type id: str
    :param is_cached_version: [Obsolete] Used for legacy scenarios and may be removed in future versions.
    :type is_cached_version: bool
    :param is_deleted: True if this package has been deleted.
    :type is_deleted: bool
    :param is_latest: True if this is the latest version of the package by package type sort order.
    :type is_latest: bool
    :param is_listed: (NuGet Only) True if this package is listed.
    :type is_listed: bool
    :param normalized_version: Normalized version using normalization rules specific to a package type.
    :type normalized_version: str
    :param package_description: Package description.
    :type package_description: str
    :param publish_date: UTC Date the package was published to the service.
    :type publish_date: datetime
    :param storage_id: Internal storage id.
    :type storage_id: str
    :param version: Display version.
    :type version: str
    :param views: List of views containing this package version.
    :type views: list of :class:`FeedView <azure.devops.v5_1.packaging.models.FeedView>`
    :param _links: Related links
    :type _links: :class:`ReferenceLinks <azure.devops.v5_1.packaging.models.ReferenceLinks>`
    :param author: Package version author.
    :type author: str
    :param deleted_date: UTC date that this package version was deleted.
    :type deleted_date: datetime
    :param dependencies: List of dependencies for this package version.
    :type dependencies: list of :class:`PackageDependency <azure.devops.v5_1.packaging.models.PackageDependency>`
    :param description: Package version description.
    :type description: str
    :param files: Files associated with this package version, only relevant for multi-file package types.
    :type files: list of :class:`PackageFile <azure.devops.v5_1.packaging.models.PackageFile>`
    :param other_versions: Other versions of this package.
    :type other_versions: list of :class:`MinimalPackageVersion <azure.devops.v5_1.packaging.models.MinimalPackageVersion>`
    :param protocol_metadata: Extended data specific to a package type.
    :type protocol_metadata: :class:`ProtocolMetadata <azure.devops.v5_1.packaging.models.ProtocolMetadata>`
    :param source_chain: List of upstream sources through which a package version moved to land in this feed.
    :type source_chain: list of :class:`UpstreamSource <azure.devops.v5_1.packaging.models.UpstreamSource>`
    :param summary: Package version summary.
    :type summary: str
    :param tags: Package version tags.
    :type tags: list of str
    :param url: Package version url.
    :type url: str
    """

    _attribute_map = {
        'direct_upstream_source_id': {'key': 'directUpstreamSourceId', 'type': 'str'},
        'id': {'key': 'id', 'type': 'str'},
        'is_cached_version': {'key': 'isCachedVersion', 'type': 'bool'},
        'is_deleted': {'key': 'isDeleted', 'type': 'bool'},
        'is_latest': {'key': 'isLatest', 'type': 'bool'},
        'is_listed': {'key': 'isListed', 'type': 'bool'},
        'normalized_version': {'key': 'normalizedVersion', 'type': 'str'},
        'package_description': {'key': 'packageDescription', 'type': 'str'},
        'publish_date': {'key': 'publishDate', 'type': 'iso-8601'},
        'storage_id': {'key': 'storageId', 'type': 'str'},
        'version': {'key': 'version', 'type': 'str'},
        'views': {'key': 'views', 'type': '[FeedView]'},
        '_links': {'key': '_links', 'type': 'ReferenceLinks'},
        'author': {'key': 'author', 'type': 'str'},
        'deleted_date': {'key': 'deletedDate', 'type': 'iso-8601'},
        'dependencies': {'key': 'dependencies', 'type': '[PackageDependency]'},
        'description': {'key': 'description', 'type': 'str'},
        'files': {'key': 'files', 'type': '[PackageFile]'},
        'other_versions': {'key': 'otherVersions', 'type': '[MinimalPackageVersion]'},
        'protocol_metadata': {'key': 'protocolMetadata', 'type': 'ProtocolMetadata'},
        'source_chain': {'key': 'sourceChain', 'type': '[UpstreamSource]'},
        'summary': {'key': 'summary', 'type': 'str'},
        'tags': {'key': 'tags', 'type': '[str]'},
        'url': {'key': 'url', 'type': 'str'}
    }

    def __init__(self, direct_upstream_source_id=None, id=None, is_cached_version=None, is_deleted=None, is_latest=None, is_listed=None, normalized_version=None, package_description=None, publish_date=None, storage_id=None, version=None, views=None, _links=None, author=None, deleted_date=None, dependencies=None, description=None, files=None, other_versions=None, protocol_metadata=None, source_chain=None, summary=None, tags=None, url=None):
        super(PackageVersion, self).__init__(direct_upstream_source_id=direct_upstream_source_id, id=id, is_cached_version=is_cached_version, is_deleted=is_deleted, is_latest=is_latest, is_listed=is_listed, normalized_version=normalized_version, package_description=package_description, publish_date=publish_date, storage_id=storage_id, version=version, views=views)
        self._links = _links
        self.author = author
        self.deleted_date = deleted_date
        self.dependencies = dependencies
        self.description = description
        self.files = files
        self.other_versions = other_versions
        self.protocol_metadata = protocol_metadata
        self.source_chain = source_chain
        self.summary = summary
        self.tags = tags
        self.url = url


class PackageVersionChange(Model):
    """
    A change to a single package version.

    :param change_type: The type of change that was performed.
    :type change_type: object
    :param continuation_token: Token marker for this change, allowing the caller to send this value back to the service and receive changes beyond this one.
    :type continuation_token: long
    :param package_version: Package version that was changed.
    :type package_version: :class:`PackageVersion <azure.devops.v5_1.packaging.models.PackageVersion>`
    """

    _attribute_map = {
        'change_type': {'key': 'changeType', 'type': 'object'},
        'continuation_token': {'key': 'continuationToken', 'type': 'long'},
        'package_version': {'key': 'packageVersion', 'type': 'PackageVersion'}
    }

    def __init__(self, change_type=None, continuation_token=None, package_version=None):
        super(PackageVersionChange, self).__init__()
        self.change_type = change_type
        self.continuation_token = continuation_token
        self.package_version = package_version


class PackageVersionMetrics(Model):
    """
    All metrics for a certain package version id

    :param download_count: Total count of downloads per package version id.
    :type download_count: float
    :param download_unique_users: Number of downloads per unique user per package version id.
    :type download_unique_users: float
    :param last_downloaded: UTC date and time when package version was last downloaded.
    :type last_downloaded: datetime
    :param package_id: Package id.
    :type package_id: str
    :param package_version_id: Package version id.
    :type package_version_id: str
    """

    _attribute_map = {
        'download_count': {'key': 'downloadCount', 'type': 'float'},
        'download_unique_users': {'key': 'downloadUniqueUsers', 'type': 'float'},
        'last_downloaded': {'key': 'lastDownloaded', 'type': 'iso-8601'},
        'package_id': {'key': 'packageId', 'type': 'str'},
        'package_version_id': {'key': 'packageVersionId', 'type': 'str'}
    }

    def __init__(self, download_count=None, download_unique_users=None, last_downloaded=None, package_id=None, package_version_id=None):
        super(PackageVersionMetrics, self).__init__()
        self.download_count = download_count
        self.download_unique_users = download_unique_users
        self.last_downloaded = last_downloaded
        self.package_id = package_id
        self.package_version_id = package_version_id


class PackageVersionMetricsQuery(Model):
    """
    Query to get package version metrics

    :param package_version_ids: List of package version ids
    :type package_version_ids: list of str
    """

    _attribute_map = {
        'package_version_ids': {'key': 'packageVersionIds', 'type': '[str]'}
    }

    def __init__(self, package_version_ids=None):
        super(PackageVersionMetricsQuery, self).__init__()
        self.package_version_ids = package_version_ids


class PackageVersionProvenance(Model):
    """
    Provenance for a published package version

    :param feed_id: Name or Id of the feed.
    :type feed_id: str
    :param package_id: Id of the package (GUID Id, not name).
    :type package_id: str
    :param package_version_id: Id of the package version (GUID Id, not name).
    :type package_version_id: str
    :param provenance: Provenance information for this package version.
    :type provenance: :class:`Provenance <azure.devops.v5_1.packaging.models.Provenance>`
    """

    _attribute_map = {
        'feed_id': {'key': 'feedId', 'type': 'str'},
        'package_id': {'key': 'packageId', 'type': 'str'},
        'package_version_id': {'key': 'packageVersionId', 'type': 'str'},
        'provenance': {'key': 'provenance', 'type': 'Provenance'}
    }

    def __init__(self, feed_id=None, package_id=None, package_version_id=None, provenance=None):
        super(PackageVersionProvenance, self).__init__()
        self.feed_id = feed_id
        self.package_id = package_id
        self.package_version_id = package_version_id
        self.provenance = provenance


class ProjectReference(Model):
    """
    :param id: Gets or sets id of the project.
    :type id: str
    :param name: Gets or sets name of the project.
    :type name: str
    :param visibility: Gets or sets visibility of the project.
    :type visibility: str
    """

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'visibility': {'key': 'visibility', 'type': 'str'}
    }

    def __init__(self, id=None, name=None, visibility=None):
        super(ProjectReference, self).__init__()
        self.id = id
        self.name = name
        self.visibility = visibility


class ProtocolMetadata(Model):
    """
    Extended metadata for a specific package type.

    :param data: Extended metadata for a specific package type, formatted to the associated schema version definition.
    :type data: object
    :param schema_version: Schema version.
    :type schema_version: int
    """

    _attribute_map = {
        'data': {'key': 'data', 'type': 'object'},
        'schema_version': {'key': 'schemaVersion', 'type': 'int'}
    }

    def __init__(self, data=None, schema_version=None):
        super(ProtocolMetadata, self).__init__()
        self.data = data
        self.schema_version = schema_version


class Provenance(Model):
    """
    Data about the origin of a published package

    :param data: Other provenance data.
    :type data: dict
    :param provenance_source: Type of provenance source, for example "InternalBuild", "InternalRelease"
    :type provenance_source: str
    :param publisher_user_identity: Identity of user that published the package
    :type publisher_user_identity: str
    :param user_agent: HTTP User-Agent used when pushing the package.
    :type user_agent: str
    """

    _attribute_map = {
        'data': {'key': 'data', 'type': '{str}'},
        'provenance_source': {'key': 'provenanceSource', 'type': 'str'},
        'publisher_user_identity': {'key': 'publisherUserIdentity', 'type': 'str'},
        'user_agent': {'key': 'userAgent', 'type': 'str'}
    }

    def __init__(self, data=None, provenance_source=None, publisher_user_identity=None, user_agent=None):
        super(Provenance, self).__init__()
        self.data = data
        self.provenance_source = provenance_source
        self.publisher_user_identity = publisher_user_identity
        self.user_agent = user_agent


class RecycleBinPackageVersion(PackageVersion):
    """
    A single package version within the recycle bin.

    :param direct_upstream_source_id: Upstream source this package was ingested from.
    :type direct_upstream_source_id: str
    :param id: Id for the package.
    :type id: str
    :param is_cached_version: [Obsolete] Used for legacy scenarios and may be removed in future versions.
    :type is_cached_version: bool
    :param is_deleted: True if this package has been deleted.
    :type is_deleted: bool
    :param is_latest: True if this is the latest version of the package by package type sort order.
    :type is_latest: bool
    :param is_listed: (NuGet Only) True if this package is listed.
    :type is_listed: bool
    :param normalized_version: Normalized version using normalization rules specific to a package type.
    :type normalized_version: str
    :param package_description: Package description.
    :type package_description: str
    :param publish_date: UTC Date the package was published to the service.
    :type publish_date: datetime
    :param storage_id: Internal storage id.
    :type storage_id: str
    :param version: Display version.
    :type version: str
    :param views: List of views containing this package version.
    :type views: list of :class:`FeedView <azure.devops.v5_1.packaging.models.FeedView>`
    :param _links: Related links
    :type _links: :class:`ReferenceLinks <azure.devops.v5_1.packaging.models.ReferenceLinks>`
    :param author: Package version author.
    :type author: str
    :param deleted_date: UTC date that this package version was deleted.
    :type deleted_date: datetime
    :param dependencies: List of dependencies for this package version.
    :type dependencies: list of :class:`PackageDependency <azure.devops.v5_1.packaging.models.PackageDependency>`
    :param description: Package version description.
    :type description: str
    :param files: Files associated with this package version, only relevant for multi-file package types.
    :type files: list of :class:`PackageFile <azure.devops.v5_1.packaging.models.PackageFile>`
    :param other_versions: Other versions of this package.
    :type other_versions: list of :class:`MinimalPackageVersion <azure.devops.v5_1.packaging.models.MinimalPackageVersion>`
    :param protocol_metadata: Extended data specific to a package type.
    :type protocol_metadata: :class:`ProtocolMetadata <azure.devops.v5_1.packaging.models.ProtocolMetadata>`
    :param source_chain: List of upstream sources through which a package version moved to land in this feed.
    :type source_chain: list of :class:`UpstreamSource <azure.devops.v5_1.packaging.models.UpstreamSource>`
    :param summary: Package version summary.
    :type summary: str
    :param tags: Package version tags.
    :type tags: list of str
    :param url: Package version url.
    :type url: str
    :param scheduled_permanent_delete_date: UTC date on which the package will automatically be removed from the recycle bin and permanently deleted.
    :type scheduled_permanent_delete_date: datetime
    """

    _attribute_map = {
        'direct_upstream_source_id': {'key': 'directUpstreamSourceId', 'type': 'str'},
        'id': {'key': 'id', 'type': 'str'},
        'is_cached_version': {'key': 'isCachedVersion', 'type': 'bool'},
        'is_deleted': {'key': 'isDeleted', 'type': 'bool'},
        'is_latest': {'key': 'isLatest', 'type': 'bool'},
        'is_listed': {'key': 'isListed', 'type': 'bool'},
        'normalized_version': {'key': 'normalizedVersion', 'type': 'str'},
        'package_description': {'key': 'packageDescription', 'type': 'str'},
        'publish_date': {'key': 'publishDate', 'type': 'iso-8601'},
        'storage_id': {'key': 'storageId', 'type': 'str'},
        'version': {'key': 'version', 'type': 'str'},
        'views': {'key': 'views', 'type': '[FeedView]'},
        '_links': {'key': '_links', 'type': 'ReferenceLinks'},
        'author': {'key': 'author', 'type': 'str'},
        'deleted_date': {'key': 'deletedDate', 'type': 'iso-8601'},
        'dependencies': {'key': 'dependencies', 'type': '[PackageDependency]'},
        'description': {'key': 'description', 'type': 'str'},
        'files': {'key': 'files', 'type': '[PackageFile]'},
        'other_versions': {'key': 'otherVersions', 'type': '[MinimalPackageVersion]'},
        'protocol_metadata': {'key': 'protocolMetadata', 'type': 'ProtocolMetadata'},
        'source_chain': {'key': 'sourceChain', 'type': '[UpstreamSource]'},
        'summary': {'key': 'summary', 'type': 'str'},
        'tags': {'key': 'tags', 'type': '[str]'},
        'url': {'key': 'url', 'type': 'str'},
        'scheduled_permanent_delete_date': {'key': 'scheduledPermanentDeleteDate', 'type': 'iso-8601'}
    }

    def __init__(self, direct_upstream_source_id=None, id=None, is_cached_version=None, is_deleted=None, is_latest=None, is_listed=None, normalized_version=None, package_description=None, publish_date=None, storage_id=None, version=None, views=None, _links=None, author=None, deleted_date=None, dependencies=None, description=None, files=None, other_versions=None, protocol_metadata=None, source_chain=None, summary=None, tags=None, url=None, scheduled_permanent_delete_date=None):
        super(RecycleBinPackageVersion, self).__init__(direct_upstream_source_id=direct_upstream_source_id, id=id, is_cached_version=is_cached_version, is_deleted=is_deleted, is_latest=is_latest, is_listed=is_listed, normalized_version=normalized_version, package_description=package_description, publish_date=publish_date, storage_id=storage_id, version=version, views=views, _links=_links, author=author, deleted_date=deleted_date, dependencies=dependencies, description=description, files=files, other_versions=other_versions, protocol_metadata=protocol_metadata, source_chain=source_chain, summary=summary, tags=tags, url=url)
        self.scheduled_permanent_delete_date = scheduled_permanent_delete_date


class ReferenceLinks(Model):
    """
    The class to represent a collection of REST reference links.

    :param links: The readonly view of the links.  Because Reference links are readonly, we only want to expose them as read only.
    :type links: dict
    """

    _attribute_map = {
        'links': {'key': 'links', 'type': '{object}'}
    }

    def __init__(self, links=None):
        super(ReferenceLinks, self).__init__()
        self.links = links


class UpstreamSource(Model):
    """
    Upstream source definition, including its Identity, package type, and other associated information.

    :param deleted_date: UTC date that this upstream was deleted.
    :type deleted_date: datetime
    :param display_location: Locator for connecting to the upstream source in a user friendly format, that may potentially change over time
    :type display_location: str
    :param id: Identity of the upstream source.
    :type id: str
    :param internal_upstream_collection_id: For an internal upstream type, track the Azure DevOps organization that contains it.
    :type internal_upstream_collection_id: str
    :param internal_upstream_feed_id: For an internal upstream type, track the feed id being referenced.
    :type internal_upstream_feed_id: str
    :param internal_upstream_view_id: For an internal upstream type, track the view of the feed being referenced.
    :type internal_upstream_view_id: str
    :param location: Consistent locator for connecting to the upstream source.
    :type location: str
    :param name: Display name.
    :type name: str
    :param protocol: Package type associated with the upstream source.
    :type protocol: str
    :param upstream_source_type: Source type, such as Public or Internal.
    :type upstream_source_type: object
    """

    _attribute_map = {
        'deleted_date': {'key': 'deletedDate', 'type': 'iso-8601'},
        'display_location': {'key': 'displayLocation', 'type': 'str'},
        'id': {'key': 'id', 'type': 'str'},
        'internal_upstream_collection_id': {'key': 'internalUpstreamCollectionId', 'type': 'str'},
        'internal_upstream_feed_id': {'key': 'internalUpstreamFeedId', 'type': 'str'},
        'internal_upstream_view_id': {'key': 'internalUpstreamViewId', 'type': 'str'},
        'location': {'key': 'location', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'protocol': {'key': 'protocol', 'type': 'str'},
        'upstream_source_type': {'key': 'upstreamSourceType', 'type': 'object'}
    }

    def __init__(self, deleted_date=None, display_location=None, id=None, internal_upstream_collection_id=None, internal_upstream_feed_id=None, internal_upstream_view_id=None, location=None, name=None, protocol=None, upstream_source_type=None):
        super(UpstreamSource, self).__init__()
        self.deleted_date = deleted_date
        self.display_location = display_location
        self.id = id
        self.internal_upstream_collection_id = internal_upstream_collection_id
        self.internal_upstream_feed_id = internal_upstream_feed_id
        self.internal_upstream_view_id = internal_upstream_view_id
        self.location = location
        self.name = name
        self.protocol = protocol
        self.upstream_source_type = upstream_source_type


class Feed(FeedCore):
    """
    A container for artifacts.

    :param allow_upstream_name_conflict: OBSOLETE: If set, the feed will allow upload of packages that exist on the upstream
    :type allow_upstream_name_conflict: bool
    :param capabilities: Supported capabilities of a feed.
    :type capabilities: object
    :param fully_qualified_id: This will either be the feed GUID or the feed GUID and view GUID depending on how the feed was accessed.
    :type fully_qualified_id: str
    :param fully_qualified_name: Full name of the view, in feed@view format.
    :type fully_qualified_name: str
    :param id: A GUID that uniquely identifies this feed.
    :type id: str
    :param is_read_only: If set, all packages in the feed are immutable.  It is important to note that feed views are immutable; therefore, this flag will always be set for views.
    :type is_read_only: bool
    :param name: A name for the feed. feed names must follow these rules: <list type="bullet"><item><description> Must not exceed 64 characters </description></item><item><description> Must not contain whitespaces </description></item><item><description> Must not start with an underscore or a period </description></item><item><description> Must not end with a period </description></item><item><description> Must not contain any of the following illegal characters: <![CDATA[ @, ~, ;, {, }, \, +, =, <, >, |, /, \\, ?, :, &, $, *, \", #, [, ] ]]></description></item></list>
    :type name: str
    :param project: The project that this feed is associated with.
    :type project: :class:`ProjectReference <azure.devops.v5_1.packaging.models.ProjectReference>`
    :param upstream_enabled: OBSOLETE: This should always be true.  Setting to false will override all sources in UpstreamSources.
    :type upstream_enabled: bool
    :param upstream_sources: A list of sources that this feed will fetch packages from.  An empty list indicates that this feed will not search any additional sources for packages.
    :type upstream_sources: list of :class:`UpstreamSource <azure.devops.v5_1.packaging.models.UpstreamSource>`
    :param view: Definition of the view.
    :type view: :class:`FeedView <azure.devops.v5_1.packaging.models.FeedView>`
    :param view_id: View Id.
    :type view_id: str
    :param view_name: View name.
    :type view_name: str
    :param _links: Related REST links.
    :type _links: :class:`ReferenceLinks <azure.devops.v5_1.packaging.models.ReferenceLinks>`
    :param badges_enabled: If set, this feed supports generation of package badges.
    :type badges_enabled: bool
    :param default_view_id: The view that the feed administrator has indicated is the default experience for readers.
    :type default_view_id: str
    :param deleted_date: The date that this feed was deleted.
    :type deleted_date: datetime
    :param description: A description for the feed.  Descriptions must not exceed 255 characters.
    :type description: str
    :param hide_deleted_package_versions: If set, the feed will hide all deleted/unpublished versions
    :type hide_deleted_package_versions: bool
    :param permissions: Explicit permissions for the feed.
    :type permissions: list of :class:`FeedPermission <azure.devops.v5_1.packaging.models.FeedPermission>`
    :param upstream_enabled_changed_date: If set, time that the UpstreamEnabled property was changed. Will be null if UpstreamEnabled was never changed after Feed creation.
    :type upstream_enabled_changed_date: datetime
    :param url: The URL of the base feed in GUID form.
    :type url: str
    """

    _attribute_map = {
        'allow_upstream_name_conflict': {'key': 'allowUpstreamNameConflict', 'type': 'bool'},
        'capabilities': {'key': 'capabilities', 'type': 'object'},
        'fully_qualified_id': {'key': 'fullyQualifiedId', 'type': 'str'},
        'fully_qualified_name': {'key': 'fullyQualifiedName', 'type': 'str'},
        'id': {'key': 'id', 'type': 'str'},
        'is_read_only': {'key': 'isReadOnly', 'type': 'bool'},
        'name': {'key': 'name', 'type': 'str'},
        'project': {'key': 'project', 'type': 'ProjectReference'},
        'upstream_enabled': {'key': 'upstreamEnabled', 'type': 'bool'},
        'upstream_sources': {'key': 'upstreamSources', 'type': '[UpstreamSource]'},
        'view': {'key': 'view', 'type': 'FeedView'},
        'view_id': {'key': 'viewId', 'type': 'str'},
        'view_name': {'key': 'viewName', 'type': 'str'},
        '_links': {'key': '_links', 'type': 'ReferenceLinks'},
        'badges_enabled': {'key': 'badgesEnabled', 'type': 'bool'},
        'default_view_id': {'key': 'defaultViewId', 'type': 'str'},
        'deleted_date': {'key': 'deletedDate', 'type': 'iso-8601'},
        'description': {'key': 'description', 'type': 'str'},
        'hide_deleted_package_versions': {'key': 'hideDeletedPackageVersions', 'type': 'bool'},
        'permissions': {'key': 'permissions', 'type': '[FeedPermission]'},
        'upstream_enabled_changed_date': {'key': 'upstreamEnabledChangedDate', 'type': 'iso-8601'},
        'url': {'key': 'url', 'type': 'str'}
    }

    def __init__(self, allow_upstream_name_conflict=None, capabilities=None, fully_qualified_id=None, fully_qualified_name=None, id=None, is_read_only=None, name=None, project=None, upstream_enabled=None, upstream_sources=None, view=None, view_id=None, view_name=None, _links=None, badges_enabled=None, default_view_id=None, deleted_date=None, description=None, hide_deleted_package_versions=None, permissions=None, upstream_enabled_changed_date=None, url=None):
        super(Feed, self).__init__(allow_upstream_name_conflict=allow_upstream_name_conflict, capabilities=capabilities, fully_qualified_id=fully_qualified_id, fully_qualified_name=fully_qualified_name, id=id, is_read_only=is_read_only, name=name, project=project, upstream_enabled=upstream_enabled, upstream_sources=upstream_sources, view=view, view_id=view_id, view_name=view_name)
        self._links = _links
        self.badges_enabled = badges_enabled
        self.default_view_id = default_view_id
        self.deleted_date = deleted_date
        self.description = description
        self.hide_deleted_package_versions = hide_deleted_package_versions
        self.permissions = permissions
        self.upstream_enabled_changed_date = upstream_enabled_changed_date
        self.url = url


__all__ = [
    'FeedBatchData',
    'FeedBatchOperationData',
    'FeedChange',
    'FeedChangesResponse',
    'FeedCore',
    'FeedPermission',
    'FeedRetentionPolicy',
    'FeedUpdate',
    'FeedView',
    'GlobalPermission',
    'JsonPatchOperation',
    'MinimalPackageVersion',
    'Package',
    'PackageChange',
    'PackageChangesResponse',
    'PackageDependency',
    'PackageFile',
    'PackageMetrics',
    'PackageMetricsQuery',
    'PackageVersion',
    'PackageVersionChange',
    'PackageVersionMetrics',
    'PackageVersionMetricsQuery',
    'PackageVersionProvenance',
    'ProjectReference',
    'ProtocolMetadata',
    'Provenance',
    'RecycleBinPackageVersion',
    'ReferenceLinks',
    'UpstreamSource',
    'Feed',
]
