anancarv / python-artifactory

Typed interactions with the Jfrog Artifactory REST API
MIT License
55 stars 50 forks source link

packageType value is not a valid enumeration member for Conan repository #85

Closed em2er closed 3 years ago

em2er commented 3 years ago

Describe the bug Got "pydantic.error_wrappers.ValidationError" when called arti.repositories.get_repo(key) for Conan repository

To Reproduce

  1. Create a local Conan repository in your Artifactory instance
  2. Run the following code
    arti = Artifactory(url=your_instance_url, auth=(username, password))
    for r in arti.repositories.list():
    print(r)
    print(arti.repositories.get_repo(r.key))
  3. See
    Traceback (most recent call last):
    File "~/.local/lib/python3.8/site-packages/pyartifactory/objects.py", line 439, in get_repo
    repo: AnyRepositoryResponse = parse_obj_as(
    File "pydantic/tools.py", line 35, in pydantic.tools.parse_obj_as
    File "pydantic/main.py", line 362, in pydantic.main.BaseModel.__init__
    pydantic.error_wrappers.ValidationError: 6 validation errors for ParsingModel[Union[pyartifactory.models.repository.LocalRepositoryResponse, pyartifactory.models.repository.VirtualRepositoryResponse, pyartifactory.models.repository.RemoteRepositoryResponse]]
    __root__ -> packageType
    value is not a valid enumeration member; permitted: 'maven', 'gradle', 'ivy', 'sbt', 'helm', 'cocoapods', 'opkg', 'rpm', 'nuget', 'cran', 'gems', 'npm', 'bower', 'debian', 'pypi', 'docker', 'yum', 'vcs', 'composer', 'go', 'p2', 'chef', 'puppet', 'generic' (type=type_error.enum; enum_values=[<PackageTypeEnum.maven: 'maven'>, <PackageTypeEnum.gradle: 'gradle'>, <PackageTypeEnum.ivy: 'ivy'>, <PackageTypeEnum.sbt: 'sbt'>, <PackageTypeEnum.helm: 'helm'>, <PackageTypeEnum.cocoapods: 'cocoapods'>, <PackageTypeEnum.opkg: 'opkg'>, <PackageTypeEnum.rpm: 'rpm'>, <PackageTypeEnum.nuget: 'nuget'>, <PackageTypeEnum.cran: 'cran'>, <PackageTypeEnum.gems: 'gems'>, <PackageTypeEnum.npm: 'npm'>, <PackageTypeEnum.bower: 'bower'>, <PackageTypeEnum.debian: 'debian'>, <PackageTypeEnum.pypi: 'pypi'>, <PackageTypeEnum.docker: 'docker'>, <PackageTypeEnum.yum: 'yum'>, <PackageTypeEnum.vcs: 'vcs'>, <PackageTypeEnum.composer: 'composer'>, <PackageTypeEnum.go: 'go'>, <PackageTypeEnum.p2: 'p2'>, <PackageTypeEnum.chef: 'chef'>, <PackageTypeEnum.puppet: 'puppet'>, <PackageTypeEnum.generic: 'generic'>])
    __root__ -> rclass
    unexpected value; permitted: <RClassEnum.virtual: 'virtual'> (type=value_error.const; given=local; permitted=(<RClassEnum.virtual: 'virtual'>,))
    __root__ -> packageType
    value is not a valid enumeration member; permitted: 'maven', 'gradle', 'ivy', 'sbt', 'helm', 'cocoapods', 'opkg', 'rpm', 'nuget', 'cran', 'gems', 'npm', 'bower', 'debian', 'pypi', 'docker', 'yum', 'vcs', 'composer', 'go', 'p2', 'chef', 'puppet', 'generic' (type=type_error.enum; enum_values=[<PackageTypeEnum.maven: 'maven'>, <PackageTypeEnum.gradle: 'gradle'>, <PackageTypeEnum.ivy: 'ivy'>, <PackageTypeEnum.sbt: 'sbt'>, <PackageTypeEnum.helm: 'helm'>, <PackageTypeEnum.cocoapods: 'cocoapods'>, <PackageTypeEnum.opkg: 'opkg'>, <PackageTypeEnum.rpm: 'rpm'>, <PackageTypeEnum.nuget: 'nuget'>, <PackageTypeEnum.cran: 'cran'>, <PackageTypeEnum.gems: 'gems'>, <PackageTypeEnum.npm: 'npm'>, <PackageTypeEnum.bower: 'bower'>, <PackageTypeEnum.debian: 'debian'>, <PackageTypeEnum.pypi: 'pypi'>, <PackageTypeEnum.docker: 'docker'>, <PackageTypeEnum.yum: 'yum'>, <PackageTypeEnum.vcs: 'vcs'>, <PackageTypeEnum.composer: 'composer'>, <PackageTypeEnum.go: 'go'>, <PackageTypeEnum.p2: 'p2'>, <PackageTypeEnum.chef: 'chef'>, <PackageTypeEnum.puppet: 'puppet'>, <PackageTypeEnum.generic: 'generic'>])
    __root__ -> rclass
    unexpected value; permitted: <RClassEnum.remote: 'remote'> (type=value_error.const; given=local; permitted=(<RClassEnum.remote: 'remote'>,))
    __root__ -> packageType
    value is not a valid enumeration member; permitted: 'maven', 'gradle', 'ivy', 'sbt', 'helm', 'cocoapods', 'opkg', 'rpm', 'nuget', 'cran', 'gems', 'npm', 'bower', 'debian', 'pypi', 'docker', 'yum', 'vcs', 'composer', 'go', 'p2', 'chef', 'puppet', 'generic' (type=type_error.enum; enum_values=[<PackageTypeEnum.maven: 'maven'>, <PackageTypeEnum.gradle: 'gradle'>, <PackageTypeEnum.ivy: 'ivy'>, <PackageTypeEnum.sbt: 'sbt'>, <PackageTypeEnum.helm: 'helm'>, <PackageTypeEnum.cocoapods: 'cocoapods'>, <PackageTypeEnum.opkg: 'opkg'>, <PackageTypeEnum.rpm: 'rpm'>, <PackageTypeEnum.nuget: 'nuget'>, <PackageTypeEnum.cran: 'cran'>, <PackageTypeEnum.gems: 'gems'>, <PackageTypeEnum.npm: 'npm'>, <PackageTypeEnum.bower: 'bower'>, <PackageTypeEnum.debian: 'debian'>, <PackageTypeEnum.pypi: 'pypi'>, <PackageTypeEnum.docker: 'docker'>, <PackageTypeEnum.yum: 'yum'>, <PackageTypeEnum.vcs: 'vcs'>, <PackageTypeEnum.composer: 'composer'>, <PackageTypeEnum.go: 'go'>, <PackageTypeEnum.p2: 'p2'>, <PackageTypeEnum.chef: 'chef'>, <PackageTypeEnum.puppet: 'puppet'>, <PackageTypeEnum.generic: 'generic'>])
    __root__ -> url
    field required (type=value_error.missing)

Expected behavior No error occurred

Environment:

Additional context print(r) outputs

key='xxx-conan-local' type='LOCAL' description='yyy' url='https://zzz:443/artifactory/xxx-conan-local' packageType='Conan'
anancarv commented 3 years ago

Hi @em2er , you're absolutely right. It seems that conan is missing from the repositories enum within in the code. I'll fix it ASAP. Thanks

em2er commented 3 years ago

Hi @anancarv , thx for quick response! Here are some packages that seems to be missed too in pyartifactory.models.repository.PackageTypeEnum (based on Artifactory Pro 7.10):

anancarv commented 3 years ago

I added alpine, gitlfs & vagrant repositories to PR. However, conda is not listed in the values accepted by the artifactory API: https://www.jfrog.com/confluence/display/JFROG/Repository+Configuration+JSON

em2er commented 3 years ago

However, conda is not listed in the values accepted by the artifactory API: https://www.jfrog.com/confluence/display/JFROG/Repository+Configuration+JSON

It's strange, because here is the json response for Repository Configuration request

curl -u *** -P -X https://mycompany.com/artifactory/api/repositories/conda-remote 
{
  "key" : "conda-remote",
  "packageType" : "conda",
  "description" : "",
  "notes" : "",
  "includesPattern" : "**/*",
  "excludesPattern" : "",
  "repoLayoutRef" : "simple-default",
  "enableComposerSupport" : false,
  "enableNuGetSupport" : false,
  "enableGemsSupport" : false,
  "enableNpmSupport" : false,
  "enableBowerSupport" : false,
  "enableCocoaPodsSupport" : false,
  "enableConanSupport" : false,
  "enableDebianSupport" : false,
  "debianTrivialLayout" : false,
  "enablePypiSupport" : false,
  "enablePuppetSupport" : false,
  "enableDockerSupport" : false,
  "dockerApiVersion" : "V2",
  "blockPushingSchema1" : true,
  "forceNugetAuthentication" : false,
  "enableVagrantSupport" : false,
  "enableGitLfsSupport" : false,
  "enableDistRepoSupport" : false,
  "url" : "https://repo.anaconda.com/pkgs/main",
  "username" : "",
  "password" : "",
  "proxy" : "***",
  "handleReleases" : true,
  "handleSnapshots" : true,
  "suppressPomConsistencyChecks" : true,
  "remoteRepoChecksumPolicyType" : "generate-if-absent",
  "hardFail" : false,
  "offline" : false,
  "blackedOut" : false,
  "storeArtifactsLocally" : true,
  "socketTimeoutMillis" : 15000,
  "localAddress" : "",
  "retrievalCachePeriodSecs" : 7200,
  "assumedOfflinePeriodSecs" : 300,
  "missedRetrievalCachePeriodSecs" : 1800,
  "unusedArtifactsCleanupPeriodHours" : 0,
  "fetchJarsEagerly" : false,
  "fetchSourcesEagerly" : false,
  "shareConfiguration" : false,
  "synchronizeProperties" : false,
  "maxUniqueSnapshots" : 0,
  "maxUniqueTags" : 0,
  "propertySets" : [ "artifactory" ],
  "archiveBrowsingEnabled" : false,
  "listRemoteFolderItems" : true,
  "rejectInvalidJars" : false,
  "allowAnyHostAuth" : false,
  "enableCookieManagement" : false,
  "enableTokenAuthentication" : false,
  "propagateQueryParams" : false,
  "blockMismatchingMimeTypes" : true,
  "mismatchingMimeTypesOverrideList" : "",
  "bypassHeadRequests" : false,
  "contentSynchronisation" : {
    "enabled" : false,
    "statistics" : {
      "enabled" : false
    },
    "properties" : {
      "enabled" : false
    },
    "source" : {
      "originAbsenceDetection" : false
    }
  },
  "externalDependenciesEnabled" : false,
  "xrayIndex" : false,
  "downloadRedirect" : false,
  "cdnRedirect" : false,
  "enabledChefSupport" : false,
  "rclass" : "remote"

I am pretty sure that no plugin was installed because I am the guy who installed that Artifactory Pro instance)

anancarv commented 3 years ago

Ok, they maybe forgot to add it on the documentation. We'll try to create a conda repository through the API and see if it works even if it's not documented.

anancarv commented 3 years ago

Hi @em2er , the PR has been merged. You can see the changes in the new release of pyartifactory: 1.8.3

em2er commented 3 years ago

Hi @em2er , the PR has been merged. You can see the changes in the new release of pyartifactory: 1.8.3

Hi @anancarv , great, thank you! I've just checked repo listing and it works!