Skip to content

Repository files navigation

PyArtifactory

GitHub Actions workflowPyPI versionCodacy BadgeCodacy BadgeCode style: black

pyartifactory is a Python library to access the Artifactory REST API.

This library enables you to manage Artifactory resources such as users, groups, permissions, repositories, artifacts and access tokens in your applications. Based on Python 3.6+ type hints.

Requirements

  • Python 3.6+

Install

pipinstallpyartifactory

Usage

Authentication

Since Artifactory 6.6.0 there is version 2 of the REST API for permission management, in case you have that version or higher, you need to pass api_version=2 to the constructor when you instantiate the class.

frompyartifactoryimportArtifactoryart=Artifactory(url="ARTIFACTORY_URL", auth=('USERNAME','PASSWORD_OR_API_KEY'), api_version=1)

SSL Cert Verification Options

Specify a local cert to use as client side certificate

frompyartifactoryimportArtifactoryart=Artifactory(url="ARTIFACTORY_URL", auth=('USERNAME','PASSORD_OR_API_KEY'), cert="/path_to_file/server.pem",api_version=1)

Disable host cert verification

frompyartifactoryimportArtifactoryart=Artifactory(url="ARTIFACTORY_URL", auth=('USERNAME','PASSORD_OR_API_KEY'), verify=False, api_version=1)

Admin objects

User

First, you need to create a new Artifactory object.

frompyartifactoryimportArtifactoryart=Artifactory(url="ARTIFACTORY_URL", auth=('USERNAME','PASSORD_OR_API_KEY'))

Get the list of users:

users=art.users.list()

Get a single user:

user=art.users.get("test_user")

Create a user:

frompyartifactory.modelsimportNewUser# Create Useruser=NewUser(name="test_user", password="test_password", email="user@user.com")
new_user=art.users.create(user)
# Update useruser.email="test@test.com"updated_user=art.users.update(user)

Update a user:

frompyartifactory.modelsimportUseruser=art.users.get("test_user")
# Update useruser.email="test@test.com"updated_user=art.users.update(user)

Delete a user:

art.users.delete("test_user")

Unlock a user:

art.users.unlock("test_user")

Group

Get the list of groups:

groups=art.groups.list()

Get a single group:

group=art.groups.get("group_name")

Create/Update a group:

frompyartifactory.modelsimportGroup# Create a Groupgroup=Group(name="test_group", description="test_group")
new_group=art.groups.create(group)
# Update a Groupgroup.description="test_group_2"updated_group=art.groups.update(group)

Delete a group:

art.groups.delete("test_group")

Security

A set of methods for performing operations on apiKeys, passwords ...

>>>art.security.
art.security.create_api_key( art.security.get_encrypted_password( art.security.revoke_api_key(
art.security.get_api_key( art.security.regenerate_api_key( art.security.revoke_user_api_key(

Create an access token (for a transient user):

token=art.security.create_access_token(user_name='transient_artifactory_user',
groups=['g1', 'g2'],
refreshable=True)

Create an access token for an existing user (groups are implied from the existing user):

token=art.security.create_access_token(user_name='existing_artifactory_user',
refreshable=True)

Revoke an existing revocable token:

art.security.revoke_access_token(token.access_token)

Repository

Get the list of repositories:

repositories=art.repositories.list()

Get a single repository

repo=art.repositories.get_repo("repo_name")
# According to the repo type, you'll have either a local, virtual or remote repository returned

Create/Update a repository:

frompyartifactory.modelsimportLocalRepository, VirtualRepository, RemoteRepository# Create local repolocal_repo=LocalRepository(key="test_local_repo")
new_local_repo=art.repositories.create_repo(local_repo)
# Create virtual repovirtual_repo=VirtualRepository(key="test_virtual_repo")
new_virtual_repo=art.repositories.create_repo(virtual_repo)
# Create remote reporemote_repo=RemoteRepository(key="test_remote_repo")
new_remote_repo=art.repositories.create_repo(remote_repo)
# Update a repositorylocal_repo=art.repositories.get_repo("test_local_repo")
local_repo.description="test_local_repo"updated_local_repo=art.repositories.update_repo(local_repo)

Delete a repository:

art.repositories.delete("test_local_repo")

Permission

Get the list of permissions:

permissions=art.permissions.list()

Get a single permission:

users=art.permissions.get("test_permission")

Create/Update a permission:

Artifactory lower than 6.6.0
frompyartifactory.modelsimportPermission# Create a permissionpermission=Permission(
**{
"name": "test_permission",
"repositories": ["test_repository"],
"principals": {
"users": {"test_user": ["r", "w", "n", "d"]},
"groups": {"developers": ["r"]},
},
}
)
perm=art.permissions.create(permission)
# Update permissionpermission.repositories= ["test_repository_2"]
updated_permission=art.permissions.update(permission)
Artifactory 6.6.0 or higher
frompyartifactoryimportArtifactoryfrompyartifactory.modelsimportPermissionV2frompyartifactory.models.permissionimportPermissionEnumV2, PrincipalsPermissionV2, RepoV2, BuildV2, ReleaseBundleV2# To use PermissionV2, make sure to set api_version=2art=Artifactory(url="ARTIFACTORY_URL", auth=('USERNAME','PASSWORD_OR_API_KEY'), api_version=2)
# Create a permissionpermission=PermissionV2(
name="test_permission",
repo=RepoV2(
repositories=["test_repository"],
actions=PrincipalsPermissionV2(
users={
"test_user": [
PermissionEnumV2.read,
PermissionEnumV2.annotate,
PermissionEnumV2.write,
PermissionEnumV2.delete,
]
},
groups={
"developers": [
PermissionEnumV2.read,
PermissionEnumV2.annotate,
PermissionEnumV2.write,
PermissionEnumV2.delete,
],
},
),
includePatterns=["**"],
excludePatterns=[],
),
build=BuildV2(
actions=PrincipalsPermissionV2(
users={
"test_user": [
PermissionEnumV2.read,
PermissionEnumV2.write,
]
},
groups={
"developers": [
PermissionEnumV2.read,
PermissionEnumV2.write,
],
},
),
includePatterns=[""],
excludePatterns=[""],
),
releaseBundle=ReleaseBundleV2(
repositories=["release-bundles"],
actions=PrincipalsPermissionV2(
users={
"test_user": [
PermissionEnumV2.read,
]
},
groups={
"developers": [
PermissionEnumV2.read,
],
},
),
includePatterns=[""],
excludePatterns=[""],
)
# You don't have to set all the objects repo, build and releaseBundle# If you only need repo for example, you can set only the repo object
)
perm=art.permissions.create(permission)
# Update permissionpermission.repo.repositories= ["test_repository_2"]
updated_permission=art.permissions.update(permission)

Delete a permission:

art.permissions.delete("test_permission")

Artifacts

Get the information about a file or folder

artifact_info=art.artifacts.info("<ARTIFACT_PATH_IN_ARTIFACTORY>")
# file_info = art.artifacts.info("my-repository/my/artifact/directory/file.txt")# folder_info = art.artifacts.info("my-repository/my/artifact/directory")

Deploy an artifact

artifact=art.artifacts.deploy("<LOCAL_FILE_LOCATION>", "<ARTIFACT_PATH_IN_ARTIFACTORY>")
# artifact = art.artifacts.deploy("Desktop/myNewFile.txt", "my-repository/my/new/artifact/directory/file.txt")

Download an artifact

artifact=art.artifacts.download("<ARTIFACT_PATH_IN_ARTIFACTORY>", "<LOCAL_DIRECTORY_PATH>")
# artifact = art.artifacts.download("my-artifactory-repository/my/new/artifact/file.txt", "Desktop/my/local/directory")# The artifact location is returned by the download method# If you have not set a <LOCAL_DIRECTORY_PATH>, the artifact will be downloaded in the current directory

Retrieve artifact properties

artifact_properties=art.artifacts.properties("<ARTIFACT_PATH_IN_ARTIFACTORY>") # returns all properties# artifact_properties = art.artifacts.properties("my-repository/my/new/artifact/directory/file.txt")artifact_properties=art.artifacts.properties("<ARTIFACT_PATH_IN_ARTIFACTORY>", ["prop1", "prop2"]) # returns specific propertiesartifact_properties.properties["prop1"] # ["value1", "value1-bis"]

Retrieve artifact stats

artifact_stats=art.artifacts.stats("<ARTIFACT_PATH_IN_ARTIFACTORY>")
# artifact_stats = art.artifacts.stats("my-repository/my/new/artifact/directory/file.txt")

Copy artifact to a new location

artifact=art.artifacts.copy("<CURRENT_ARTIFACT_PATH_IN_ARTIFACTORY>","<NEW_ARTIFACT_PATH_IN_ARTIFACTORY>")
# If you want to run a dryRun test, you can do the following:# artifact = art.artifacts.copy("my-repository/current/artifact/path/file.txt","my-repository/new/artifact/path/file.txt", dryrun=True)# It will return properties of the newly copied artifact

Move artifact to a new location

artifact=art.artifacts.move("<CURRENT_ARTIFACT_PATH_IN_ARTIFACTORY>","<NEW_ARTIFACT_PATH_IN_ARTIFACTORY>")
# You can also run a dryRun test with the move operation# It will return properties of the newly moved artifact

Delete an artifact

art.artifacts.delete("<ARTIFACT_PATH_IN_ARTIFACTORY>")

Contributing

Please read the Development - Contributing guidelines.

About

Typed interactions with the Jfrog Artifactory REST API

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages