diff options
Diffstat (limited to 'tools/python_test_v4.py')
-rw-r--r-- | tools/python_test_v4.py | 851 |
1 files changed, 442 insertions, 409 deletions
diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py index 958e350..a00ae29 100644 --- a/tools/python_test_v4.py +++ b/tools/python_test_v4.py @@ -6,24 +6,28 @@ import requests import gitlab -LOGIN = 'root' -PASSWORD = '5iveL!fe' - -SSH_KEY = ("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZAjAX8vTiHD7Yi3/EzuVaDChtih" - "79HyJZ6H9dEqxFfmGA1YnncE0xujQ64TCebhkYJKzmTJCImSVkOu9C4hZgsw6eE76n" - "+Cg3VwEeDUFy+GXlEJWlHaEyc3HWioxgOALbUp3rOezNh+d8BDwwqvENGoePEBsz5l" - "a6WP5lTi/HJIjAl6Hu+zHgdj1XVExeH+S52EwpZf/ylTJub0Bl5gHwf/siVE48mLMI" - "sqrukXTZ6Zg+8EHAIvIQwJ1dKcXe8P5IoLT7VKrbkgAnolS0I8J+uH7KtErZJb5oZh" - "S4OEwsNpaXMAr+6/wWSpircV2/e7sFLlhlKBC4Iq1MpqlZ7G3p foo@bar") -DEPLOY_KEY = ("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFdRyjJQh+1niBpXqE2I8dzjG" - "MXFHlRjX9yk/UfOn075IdaockdU58sw2Ai1XIWFpZpfJkW7z+P47ZNSqm1gzeXI" - "rtKa9ZUp8A7SZe8vH4XVn7kh7bwWCUirqtn8El9XdqfkzOs/+FuViriUWoJVpA6" - "WZsDNaqINFKIA5fj/q8XQw+BcS92L09QJg9oVUuH0VVwNYbU2M2IRmSpybgC/gu" - "uWTrnCDMmLItksATifLvRZwgdI8dr+q6tbxbZknNcgEPrI2jT0hYN9ZcjNeWuyv" - "rke9IepE7SPBT41C+YtUX4dfDZDmczM1cE0YL/krdUCfuZHMa4ZS2YyNd6slufc" - "vn bar@foo") - -GPG_KEY = '''-----BEGIN PGP PUBLIC KEY BLOCK----- +LOGIN = "root" +PASSWORD = "5iveL!fe" + +SSH_KEY = ( + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZAjAX8vTiHD7Yi3/EzuVaDChtih" + "79HyJZ6H9dEqxFfmGA1YnncE0xujQ64TCebhkYJKzmTJCImSVkOu9C4hZgsw6eE76n" + "+Cg3VwEeDUFy+GXlEJWlHaEyc3HWioxgOALbUp3rOezNh+d8BDwwqvENGoePEBsz5l" + "a6WP5lTi/HJIjAl6Hu+zHgdj1XVExeH+S52EwpZf/ylTJub0Bl5gHwf/siVE48mLMI" + "sqrukXTZ6Zg+8EHAIvIQwJ1dKcXe8P5IoLT7VKrbkgAnolS0I8J+uH7KtErZJb5oZh" + "S4OEwsNpaXMAr+6/wWSpircV2/e7sFLlhlKBC4Iq1MpqlZ7G3p foo@bar" +) +DEPLOY_KEY = ( + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFdRyjJQh+1niBpXqE2I8dzjG" + "MXFHlRjX9yk/UfOn075IdaockdU58sw2Ai1XIWFpZpfJkW7z+P47ZNSqm1gzeXI" + "rtKa9ZUp8A7SZe8vH4XVn7kh7bwWCUirqtn8El9XdqfkzOs/+FuViriUWoJVpA6" + "WZsDNaqINFKIA5fj/q8XQw+BcS92L09QJg9oVUuH0VVwNYbU2M2IRmSpybgC/gu" + "uWTrnCDMmLItksATifLvRZwgdI8dr+q6tbxbZknNcgEPrI2jT0hYN9ZcjNeWuyv" + "rke9IepE7SPBT41C+YtUX4dfDZDmczM1cE0YL/krdUCfuZHMa4ZS2YyNd6slufc" + "vn bar@foo" +) + +GPG_KEY = """-----BEGIN PGP PUBLIC KEY BLOCK----- mQENBFn5mzYBCADH6SDVPAp1zh/hxmTi0QplkOfExBACpuY6OhzNdIg+8/528b3g Y5YFR6T/HLv/PmeHskUj21end1C0PNG2T9dTx+2Vlh9ISsSG1kyF9T5fvMR3bE0x @@ -51,608 +55,636 @@ YzGsC/I9d7k6uxAv1L9Nm5F2HaAQDzhkdd16nKkGaPGR35cT1JLInkfl5cdm7ldN nxs4TLO3kZjUTgWKdhpgRNF5hwaz51ZjpebaRf/ZqRuNyX4lIRolDxzOn/+O1o8L qG2ZdhHHmSK2LaQLFiSprUkikStNU9BqSQ== =5OGa ------END PGP PUBLIC KEY BLOCK-----''' -AVATAR_PATH = os.path.join(os.path.dirname(__file__), 'avatar.png') +-----END PGP PUBLIC KEY BLOCK-----""" +AVATAR_PATH = os.path.join(os.path.dirname(__file__), "avatar.png") # token authentication from config file -gl = gitlab.Gitlab.from_config(config_files=['/tmp/python-gitlab.cfg']) +gl = gitlab.Gitlab.from_config(config_files=["/tmp/python-gitlab.cfg"]) gl.auth() -assert(isinstance(gl.user, gitlab.v4.objects.CurrentUser)) +assert isinstance(gl.user, gitlab.v4.objects.CurrentUser) # markdown (need to wait for gitlab 11 to enable the test) # html = gl.markdown('foo') # assert('foo' in html) -success, errors = gl.lint('Invalid') -assert(success is False) -assert(errors) +success, errors = gl.lint("Invalid") +assert success is False +assert errors # sidekiq out = gl.sidekiq.queue_metrics() -assert(isinstance(out, dict)) -assert('pages' in out['queues']) +assert isinstance(out, dict) +assert "pages" in out["queues"] out = gl.sidekiq.process_metrics() -assert(isinstance(out, dict)) -assert('hostname' in out['processes'][0]) +assert isinstance(out, dict) +assert "hostname" in out["processes"][0] out = gl.sidekiq.job_stats() -assert(isinstance(out, dict)) -assert('processed' in out['jobs']) +assert isinstance(out, dict) +assert "processed" in out["jobs"] out = gl.sidekiq.compound_metrics() -assert(isinstance(out, dict)) -assert('jobs' in out) -assert('processes' in out) -assert('queues' in out) +assert isinstance(out, dict) +assert "jobs" in out +assert "processes" in out +assert "queues" in out # settings settings = gl.settings.get() settings.default_projects_limit = 42 settings.save() settings = gl.settings.get() -assert(settings.default_projects_limit == 42) +assert settings.default_projects_limit == 42 # users -new_user = gl.users.create({'email': 'foo@bar.com', 'username': 'foo', - 'name': 'foo', 'password': 'foo_password', - 'avatar': open(AVATAR_PATH, 'rb')}) -avatar_url = new_user.avatar_url.replace('gitlab.test', 'localhost:8080') +new_user = gl.users.create( + { + "email": "foo@bar.com", + "username": "foo", + "name": "foo", + "password": "foo_password", + "avatar": open(AVATAR_PATH, "rb"), + } +) +avatar_url = new_user.avatar_url.replace("gitlab.test", "localhost:8080") uploaded_avatar = requests.get(avatar_url).content -assert(uploaded_avatar == open(AVATAR_PATH, 'rb').read()) +assert uploaded_avatar == open(AVATAR_PATH, "rb").read() users_list = gl.users.list() for user in users_list: - if user.username == 'foo': + if user.username == "foo": break -assert(new_user.username == user.username) -assert(new_user.email == user.email) +assert new_user.username == user.username +assert new_user.email == user.email new_user.block() new_user.unblock() # user projects list -assert(len(new_user.projects.list()) == 0) +assert len(new_user.projects.list()) == 0 # events list new_user.events.list() foobar_user = gl.users.create( - {'email': 'foobar@example.com', 'username': 'foobar', - 'name': 'Foo Bar', 'password': 'foobar_password'}) + { + "email": "foobar@example.com", + "username": "foobar", + "name": "Foo Bar", + "password": "foobar_password", + } +) -assert gl.users.list(search='foobar')[0].id == foobar_user.id +assert gl.users.list(search="foobar")[0].id == foobar_user.id expected = [new_user, foobar_user] -actual = list(gl.users.list(search='foo')) +actual = list(gl.users.list(search="foo")) assert len(expected) == len(actual) -assert len(gl.users.list(search='asdf')) == 0 -foobar_user.bio = 'This is the user bio' +assert len(gl.users.list(search="asdf")) == 0 +foobar_user.bio = "This is the user bio" foobar_user.save() # GPG keys -gkey = new_user.gpgkeys.create({'key': GPG_KEY}) -assert(len(new_user.gpgkeys.list()) == 1) +gkey = new_user.gpgkeys.create({"key": GPG_KEY}) +assert len(new_user.gpgkeys.list()) == 1 # Seems broken on the gitlab side # gkey = new_user.gpgkeys.get(gkey.id) gkey.delete() -assert(len(new_user.gpgkeys.list()) == 0) +assert len(new_user.gpgkeys.list()) == 0 # SSH keys -key = new_user.keys.create({'title': 'testkey', 'key': SSH_KEY}) -assert(len(new_user.keys.list()) == 1) +key = new_user.keys.create({"title": "testkey", "key": SSH_KEY}) +assert len(new_user.keys.list()) == 1 key.delete() -assert(len(new_user.keys.list()) == 0) +assert len(new_user.keys.list()) == 0 # emails -email = new_user.emails.create({'email': 'foo2@bar.com'}) -assert(len(new_user.emails.list()) == 1) +email = new_user.emails.create({"email": "foo2@bar.com"}) +assert len(new_user.emails.list()) == 1 email.delete() -assert(len(new_user.emails.list()) == 0) +assert len(new_user.emails.list()) == 0 # custom attributes attrs = new_user.customattributes.list() -assert(len(attrs) == 0) -attr = new_user.customattributes.set('key', 'value1') -assert(len(gl.users.list(custom_attributes={'key': 'value1'})) == 1) -assert(attr.key == 'key') -assert(attr.value == 'value1') -assert(len(new_user.customattributes.list()) == 1) -attr = new_user.customattributes.set('key', 'value2') -attr = new_user.customattributes.get('key') -assert(attr.value == 'value2') -assert(len(new_user.customattributes.list()) == 1) +assert len(attrs) == 0 +attr = new_user.customattributes.set("key", "value1") +assert len(gl.users.list(custom_attributes={"key": "value1"})) == 1 +assert attr.key == "key" +assert attr.value == "value1" +assert len(new_user.customattributes.list()) == 1 +attr = new_user.customattributes.set("key", "value2") +attr = new_user.customattributes.get("key") +assert attr.value == "value2" +assert len(new_user.customattributes.list()) == 1 attr.delete() -assert(len(new_user.customattributes.list()) == 0) +assert len(new_user.customattributes.list()) == 0 # impersonation tokens user_token = new_user.impersonationtokens.create( - {'name': 'token1', 'scopes': ['api', 'read_user']}) -l = new_user.impersonationtokens.list(state='active') -assert(len(l) == 1) + {"name": "token1", "scopes": ["api", "read_user"]} +) +l = new_user.impersonationtokens.list(state="active") +assert len(l) == 1 user_token.delete() -l = new_user.impersonationtokens.list(state='active') -assert(len(l) == 0) -l = new_user.impersonationtokens.list(state='inactive') -assert(len(l) == 1) +l = new_user.impersonationtokens.list(state="active") +assert len(l) == 0 +l = new_user.impersonationtokens.list(state="inactive") +assert len(l) == 1 new_user.delete() foobar_user.delete() -assert(len(gl.users.list()) == 3) +assert len(gl.users.list()) == 3 # current user mail -mail = gl.user.emails.create({'email': 'current@user.com'}) -assert(len(gl.user.emails.list()) == 1) +mail = gl.user.emails.create({"email": "current@user.com"}) +assert len(gl.user.emails.list()) == 1 mail.delete() -assert(len(gl.user.emails.list()) == 0) +assert len(gl.user.emails.list()) == 0 # current user GPG keys -gkey = gl.user.gpgkeys.create({'key': GPG_KEY}) -assert(len(gl.user.gpgkeys.list()) == 1) +gkey = gl.user.gpgkeys.create({"key": GPG_KEY}) +assert len(gl.user.gpgkeys.list()) == 1 # Seems broken on the gitlab side gkey = gl.user.gpgkeys.get(gkey.id) gkey.delete() -assert(len(gl.user.gpgkeys.list()) == 0) +assert len(gl.user.gpgkeys.list()) == 0 # current user key -key = gl.user.keys.create({'title': 'testkey', 'key': SSH_KEY}) -assert(len(gl.user.keys.list()) == 1) +key = gl.user.keys.create({"title": "testkey", "key": SSH_KEY}) +assert len(gl.user.keys.list()) == 1 key.delete() -assert(len(gl.user.keys.list()) == 0) +assert len(gl.user.keys.list()) == 0 # templates -assert(gl.dockerfiles.list()) -dockerfile = gl.dockerfiles.get('Node') -assert(dockerfile.content is not None) +assert gl.dockerfiles.list() +dockerfile = gl.dockerfiles.get("Node") +assert dockerfile.content is not None -assert(gl.gitignores.list()) -gitignore = gl.gitignores.get('Node') -assert(gitignore.content is not None) +assert gl.gitignores.list() +gitignore = gl.gitignores.get("Node") +assert gitignore.content is not None -assert(gl.gitlabciymls.list()) -gitlabciyml = gl.gitlabciymls.get('Nodejs') -assert(gitlabciyml.content is not None) +assert gl.gitlabciymls.list() +gitlabciyml = gl.gitlabciymls.get("Nodejs") +assert gitlabciyml.content is not None -assert(gl.licenses.list()) -license = gl.licenses.get('bsd-2-clause', project='mytestproject', - fullname='mytestfullname') -assert('mytestfullname' in license.content) +assert gl.licenses.list() +license = gl.licenses.get( + "bsd-2-clause", project="mytestproject", fullname="mytestfullname" +) +assert "mytestfullname" in license.content # groups -user1 = gl.users.create({'email': 'user1@test.com', 'username': 'user1', - 'name': 'user1', 'password': 'user1_pass'}) -user2 = gl.users.create({'email': 'user2@test.com', 'username': 'user2', - 'name': 'user2', 'password': 'user2_pass'}) -group1 = gl.groups.create({'name': 'group1', 'path': 'group1'}) -group2 = gl.groups.create({'name': 'group2', 'path': 'group2'}) +user1 = gl.users.create( + { + "email": "user1@test.com", + "username": "user1", + "name": "user1", + "password": "user1_pass", + } +) +user2 = gl.users.create( + { + "email": "user2@test.com", + "username": "user2", + "name": "user2", + "password": "user2_pass", + } +) +group1 = gl.groups.create({"name": "group1", "path": "group1"}) +group2 = gl.groups.create({"name": "group2", "path": "group2"}) -p_id = gl.groups.list(search='group2')[0].id -group3 = gl.groups.create({'name': 'group3', 'path': 'group3', 'parent_id': p_id}) +p_id = gl.groups.list(search="group2")[0].id +group3 = gl.groups.create({"name": "group3", "path": "group3", "parent_id": p_id}) -assert(len(gl.groups.list()) == 3) -assert(len(gl.groups.list(search='oup1')) == 1) -assert(group3.parent_id == p_id) -assert(group2.subgroups.list()[0].id == group3.id) +assert len(gl.groups.list()) == 3 +assert len(gl.groups.list(search="oup1")) == 1 +assert group3.parent_id == p_id +assert group2.subgroups.list()[0].id == group3.id -group1.members.create({'access_level': gitlab.const.OWNER_ACCESS, - 'user_id': user1.id}) -group1.members.create({'access_level': gitlab.const.GUEST_ACCESS, - 'user_id': user2.id}) +group1.members.create({"access_level": gitlab.const.OWNER_ACCESS, "user_id": user1.id}) +group1.members.create({"access_level": gitlab.const.GUEST_ACCESS, "user_id": user2.id}) -group2.members.create({'access_level': gitlab.const.OWNER_ACCESS, - 'user_id': user2.id}) +group2.members.create({"access_level": gitlab.const.OWNER_ACCESS, "user_id": user2.id}) # Administrator belongs to the groups -assert(len(group1.members.list()) == 3) -assert(len(group2.members.list()) == 2) +assert len(group1.members.list()) == 3 +assert len(group2.members.list()) == 2 group1.members.delete(user1.id) -assert(len(group1.members.list()) == 2) -assert(len(group1.members.all())) +assert len(group1.members.list()) == 2 +assert len(group1.members.all()) member = group1.members.get(user2.id) member.access_level = gitlab.const.OWNER_ACCESS member.save() member = group1.members.get(user2.id) -assert(member.access_level == gitlab.const.OWNER_ACCESS) +assert member.access_level == gitlab.const.OWNER_ACCESS group2.members.delete(gl.user.id) # group custom attributes attrs = group2.customattributes.list() -assert(len(attrs) == 0) -attr = group2.customattributes.set('key', 'value1') -assert(len(gl.groups.list(custom_attributes={'key': 'value1'})) == 1) -assert(attr.key == 'key') -assert(attr.value == 'value1') -assert(len(group2.customattributes.list()) == 1) -attr = group2.customattributes.set('key', 'value2') -attr = group2.customattributes.get('key') -assert(attr.value == 'value2') -assert(len(group2.customattributes.list()) == 1) +assert len(attrs) == 0 +attr = group2.customattributes.set("key", "value1") +assert len(gl.groups.list(custom_attributes={"key": "value1"})) == 1 +assert attr.key == "key" +assert attr.value == "value1" +assert len(group2.customattributes.list()) == 1 +attr = group2.customattributes.set("key", "value2") +attr = group2.customattributes.get("key") +assert attr.value == "value2" +assert len(group2.customattributes.list()) == 1 attr.delete() -assert(len(group2.customattributes.list()) == 0) +assert len(group2.customattributes.list()) == 0 # group notification settings settings = group2.notificationsettings.get() -settings.level = 'disabled' +settings.level = "disabled" settings.save() settings = group2.notificationsettings.get() -assert(settings.level == 'disabled') +assert settings.level == "disabled" # group badges -badge_image = 'http://example.com' -badge_link = 'http://example/img.svg' -badge = group2.badges.create({'link_url': badge_link, 'image_url': badge_image}) -assert(len(group2.badges.list()) == 1) -badge.image_url = 'http://another.example.com' +badge_image = "http://example.com" +badge_link = "http://example/img.svg" +badge = group2.badges.create({"link_url": badge_link, "image_url": badge_image}) +assert len(group2.badges.list()) == 1 +badge.image_url = "http://another.example.com" badge.save() badge = group2.badges.get(badge.id) -assert(badge.image_url == 'http://another.example.com') +assert badge.image_url == "http://another.example.com" badge.delete() -assert(len(group2.badges.list()) == 0) +assert len(group2.badges.list()) == 0 # group milestones -gm1 = group1.milestones.create({'title': 'groupmilestone1'}) -assert(len(group1.milestones.list()) == 1) -gm1.due_date = '2020-01-01T00:00:00Z' +gm1 = group1.milestones.create({"title": "groupmilestone1"}) +assert len(group1.milestones.list()) == 1 +gm1.due_date = "2020-01-01T00:00:00Z" gm1.save() -gm1.state_event = 'close' +gm1.state_event = "close" gm1.save() gm1 = group1.milestones.get(gm1.id) -assert(gm1.state == 'closed') -assert(len(gm1.issues()) == 0) -assert(len(gm1.merge_requests()) == 0) +assert gm1.state == "closed" +assert len(gm1.issues()) == 0 +assert len(gm1.merge_requests()) == 0 # group variables -group1.variables.create({'key': 'foo', 'value': 'bar'}) -g_v = group1.variables.get('foo') -assert(g_v.value == 'bar') -g_v.value = 'baz' +group1.variables.create({"key": "foo", "value": "bar"}) +g_v = group1.variables.get("foo") +assert g_v.value == "bar" +g_v.value = "baz" g_v.save() -g_v = group1.variables.get('foo') -assert(g_v.value == 'baz') -assert(len(group1.variables.list()) == 1) +g_v = group1.variables.get("foo") +assert g_v.value == "baz" +assert len(group1.variables.list()) == 1 g_v.delete() -assert(len(group1.variables.list()) == 0) +assert len(group1.variables.list()) == 0 # hooks -hook = gl.hooks.create({'url': 'http://whatever.com'}) -assert(len(gl.hooks.list()) == 1) +hook = gl.hooks.create({"url": "http://whatever.com"}) +assert len(gl.hooks.list()) == 1 hook.delete() -assert(len(gl.hooks.list()) == 0) +assert len(gl.hooks.list()) == 0 # projects -admin_project = gl.projects.create({'name': 'admin_project'}) -gr1_project = gl.projects.create({'name': 'gr1_project', - 'namespace_id': group1.id}) -gr2_project = gl.projects.create({'name': 'gr2_project', - 'namespace_id': group2.id}) -sudo_project = gl.projects.create({'name': 'sudo_project'}, sudo=user1.name) +admin_project = gl.projects.create({"name": "admin_project"}) +gr1_project = gl.projects.create({"name": "gr1_project", "namespace_id": group1.id}) +gr2_project = gl.projects.create({"name": "gr2_project", "namespace_id": group2.id}) +sudo_project = gl.projects.create({"name": "sudo_project"}, sudo=user1.name) -assert(len(gl.projects.list(owned=True)) == 2) -assert(len(gl.projects.list(search="admin")) == 1) +assert len(gl.projects.list(owned=True)) == 2 +assert len(gl.projects.list(search="admin")) == 1 # test pagination l1 = gl.projects.list(per_page=1, page=1) l2 = gl.projects.list(per_page=1, page=2) -assert(len(l1) == 1) -assert(len(l2) == 1) -assert(l1[0].id != l2[0].id) +assert len(l1) == 1 +assert len(l2) == 1 +assert l1[0].id != l2[0].id # group custom attributes attrs = admin_project.customattributes.list() -assert(len(attrs) == 0) -attr = admin_project.customattributes.set('key', 'value1') -assert(len(gl.projects.list(custom_attributes={'key': 'value1'})) == 1) -assert(attr.key == 'key') -assert(attr.value == 'value1') -assert(len(admin_project.customattributes.list()) == 1) -attr = admin_project.customattributes.set('key', 'value2') -attr = admin_project.customattributes.get('key') -assert(attr.value == 'value2') -assert(len(admin_project.customattributes.list()) == 1) +assert len(attrs) == 0 +attr = admin_project.customattributes.set("key", "value1") +assert len(gl.projects.list(custom_attributes={"key": "value1"})) == 1 +assert attr.key == "key" +assert attr.value == "value1" +assert len(admin_project.customattributes.list()) == 1 +attr = admin_project.customattributes.set("key", "value2") +attr = admin_project.customattributes.get("key") +assert attr.value == "value2" +assert len(admin_project.customattributes.list()) == 1 attr.delete() -assert(len(admin_project.customattributes.list()) == 0) +assert len(admin_project.customattributes.list()) == 0 # project pages domains -domain = admin_project.pagesdomains.create({'domain': 'foo.domain.com'}) -assert(len(admin_project.pagesdomains.list()) == 1) -assert(len(gl.pagesdomains.list()) == 1) -domain = admin_project.pagesdomains.get('foo.domain.com') -assert(domain.domain == 'foo.domain.com') +domain = admin_project.pagesdomains.create({"domain": "foo.domain.com"}) +assert len(admin_project.pagesdomains.list()) == 1 +assert len(gl.pagesdomains.list()) == 1 +domain = admin_project.pagesdomains.get("foo.domain.com") +assert domain.domain == "foo.domain.com" domain.delete() -assert(len(admin_project.pagesdomains.list()) == 0) +assert len(admin_project.pagesdomains.list()) == 0 # project content (files) -admin_project.files.create({'file_path': 'README', - 'branch': 'master', - 'content': 'Initial content', - 'commit_message': 'Initial commit'}) -readme = admin_project.files.get(file_path='README', ref='master') +admin_project.files.create( + { + "file_path": "README", + "branch": "master", + "content": "Initial content", + "commit_message": "Initial commit", + } +) +readme = admin_project.files.get(file_path="README", ref="master") readme.content = base64.b64encode(b"Improved README").decode() time.sleep(2) readme.save(branch="master", commit_message="new commit") readme.delete(commit_message="Removing README", branch="master") -admin_project.files.create({'file_path': 'README.rst', - 'branch': 'master', - 'content': 'Initial content', - 'commit_message': 'New commit'}) -readme = admin_project.files.get(file_path='README.rst', ref='master') +admin_project.files.create( + { + "file_path": "README.rst", + "branch": "master", + "content": "Initial content", + "commit_message": "New commit", + } +) +readme = admin_project.files.get(file_path="README.rst", ref="master") # The first decode() is the ProjectFile method, the second one is the bytes # object method -assert(readme.decode().decode() == 'Initial content') +assert readme.decode().decode() == "Initial content" data = { - 'branch': 'master', - 'commit_message': 'blah blah blah', - 'actions': [ - { - 'action': 'create', - 'file_path': 'blah', - 'content': 'blah' - } - ] + "branch": "master", + "commit_message": "blah blah blah", + "actions": [{"action": "create", "file_path": "blah", "content": "blah"}], } admin_project.commits.create(data) -assert('@@' in admin_project.commits.list()[0].diff()[0]['diff']) +assert "@@" in admin_project.commits.list()[0].diff()[0]["diff"] # commit status commit = admin_project.commits.list()[0] -status = commit.statuses.create({'state': 'success', 'sha': commit.id}) -assert(len(commit.statuses.list()) == 1) +status = commit.statuses.create({"state": "success", "sha": commit.id}) +assert len(commit.statuses.list()) == 1 -assert(commit.refs()) -assert(commit.merge_requests() is not None) +assert commit.refs() +assert commit.merge_requests() is not None # commit comment -commit.comments.create({'note': 'This is a commit comment'}) -assert(len(commit.comments.list()) == 1) +commit.comments.create({"note": "This is a commit comment"}) +assert len(commit.comments.list()) == 1 # commit discussion count = len(commit.discussions.list()) -discussion = commit.discussions.create({'body': 'Discussion body'}) -assert(len(commit.discussions.list()) == (count + 1)) -d_note = discussion.notes.create({'body': 'first note'}) +discussion = commit.discussions.create({"body": "Discussion body"}) +assert len(commit.discussions.list()) == (count + 1) +d_note = discussion.notes.create({"body": "first note"}) d_note_from_get = discussion.notes.get(d_note.id) -d_note_from_get.body = 'updated body' +d_note_from_get.body = "updated body" d_note_from_get.save() discussion = commit.discussions.get(discussion.id) -assert(discussion.attributes['notes'][-1]['body'] == 'updated body') +assert discussion.attributes["notes"][-1]["body"] == "updated body" d_note_from_get.delete() discussion = commit.discussions.get(discussion.id) -assert(len(discussion.attributes['notes']) == 1) +assert len(discussion.attributes["notes"]) == 1 # housekeeping admin_project.housekeeping() # repository tree = admin_project.repository_tree() -assert(len(tree) != 0) -assert(tree[0]['name'] == 'README.rst') -blob_id = tree[0]['id'] +assert len(tree) != 0 +assert tree[0]["name"] == "README.rst" +blob_id = tree[0]["id"] blob = admin_project.repository_raw_blob(blob_id) -assert(blob.decode() == 'Initial content') +assert blob.decode() == "Initial content" archive1 = admin_project.repository_archive() -archive2 = admin_project.repository_archive('master') -assert(archive1 == archive2) +archive2 = admin_project.repository_archive("master") +assert archive1 == archive2 snapshot = admin_project.snapshot() # project file uploads filename = "test.txt" file_contents = "testing contents" uploaded_file = admin_project.upload(filename, file_contents) -assert(uploaded_file["alt"] == filename) -assert(uploaded_file["url"].startswith("/uploads/")) -assert(uploaded_file["url"].endswith("/" + filename)) -assert(uploaded_file["markdown"] == "[{}]({})".format( - uploaded_file["alt"], - uploaded_file["url"], -)) +assert uploaded_file["alt"] == filename +assert uploaded_file["url"].startswith("/uploads/") +assert uploaded_file["url"].endswith("/" + filename) +assert uploaded_file["markdown"] == "[{}]({})".format( + uploaded_file["alt"], uploaded_file["url"] +) # environments -admin_project.environments.create({'name': 'env1', 'external_url': - 'http://fake.env/whatever'}) +admin_project.environments.create( + {"name": "env1", "external_url": "http://fake.env/whatever"} +) envs = admin_project.environments.list() -assert(len(envs) == 1) +assert len(envs) == 1 env = envs[0] -env.external_url = 'http://new.env/whatever' +env.external_url = "http://new.env/whatever" env.save() env = admin_project.environments.list()[0] -assert(env.external_url == 'http://new.env/whatever') +assert env.external_url == "http://new.env/whatever" env.stop() env.delete() -assert(len(admin_project.environments.list()) == 0) +assert len(admin_project.environments.list()) == 0 # project events admin_project.events.list() # forks -fork = admin_project.forks.create({'namespace': user1.username}) +fork = admin_project.forks.create({"namespace": user1.username}) p = gl.projects.get(fork.id) -assert(p.forked_from_project['id'] == admin_project.id) +assert p.forked_from_project["id"] == admin_project.id forks = admin_project.forks.list() -assert(fork.id in map(lambda p: p.id, forks)) +assert fork.id in map(lambda p: p.id, forks) # project hooks -hook = admin_project.hooks.create({'url': 'http://hook.url'}) -assert(len(admin_project.hooks.list()) == 1) +hook = admin_project.hooks.create({"url": "http://hook.url"}) +assert len(admin_project.hooks.list()) == 1 hook.note_events = True hook.save() hook = admin_project.hooks.get(hook.id) -assert(hook.note_events is True) +assert hook.note_events is True hook.delete() # deploy keys -deploy_key = admin_project.keys.create({'title': 'foo@bar', 'key': DEPLOY_KEY}) +deploy_key = admin_project.keys.create({"title": "foo@bar", "key": DEPLOY_KEY}) project_keys = list(admin_project.keys.list()) -assert(len(project_keys) == 1) +assert len(project_keys) == 1 sudo_project.keys.enable(deploy_key.id) -assert(len(sudo_project.keys.list()) == 1) +assert len(sudo_project.keys.list()) == 1 sudo_project.keys.delete(deploy_key.id) -assert(len(sudo_project.keys.list()) == 0) +assert len(sudo_project.keys.list()) == 0 # labels -label1 = admin_project.labels.create({'name': 'label1', 'color': '#778899'}) +label1 = admin_project.labels.create({"name": "label1", "color": "#778899"}) label1 = admin_project.labels.list()[0] -assert(len(admin_project.labels.list()) == 1) -label1.new_name = 'label1updated' +assert len(admin_project.labels.list()) == 1 +label1.new_name = "label1updated" label1.save() -assert(label1.name == 'label1updated') +assert label1.name == "label1updated" label1.subscribe() -assert(label1.subscribed == True) +assert label1.subscribed == True label1.unsubscribe() -assert(label1.subscribed == False) +assert label1.subscribed == False label1.delete() # milestones -m1 = admin_project.milestones.create({'title': 'milestone1'}) -assert(len(admin_project.milestones.list()) == 1) -m1.due_date = '2020-01-01T00:00:00Z' +m1 = admin_project.milestones.create({"title": "milestone1"}) +assert len(admin_project.milestones.list()) == 1 +m1.due_date = "2020-01-01T00:00:00Z" m1.save() -m1.state_event = 'close' +m1.state_event = "close" m1.save() m1 = admin_project.milestones.get(m1.id) -assert(m1.state == 'closed') -assert(len(m1.issues()) == 0) -assert(len(m1.merge_requests()) == 0) +assert m1.state == "closed" +assert len(m1.issues()) == 0 +assert len(m1.merge_requests()) == 0 # issues -issue1 = admin_project.issues.create({'title': 'my issue 1', - 'milestone_id': m1.id}) -issue2 = admin_project.issues.create({'title': 'my issue 2'}) -issue3 = admin_project.issues.create({'title': 'my issue 3'}) -assert(len(admin_project.issues.list()) == 3) -issue3.state_event = 'close' +issue1 = admin_project.issues.create({"title": "my issue 1", "milestone_id": m1.id}) +issue2 = admin_project.issues.create({"title": "my issue 2"}) +issue3 = admin_project.issues.create({"title": "my issue 3"}) +assert len(admin_project.issues.list()) == 3 +issue3.state_event = "close" issue3.save() -assert(len(admin_project.issues.list(state='closed')) == 1) -assert(len(admin_project.issues.list(state='opened')) == 2) -assert(len(admin_project.issues.list(milestone='milestone1')) == 1) -assert(m1.issues().next().title == 'my issue 1') -note = issue1.notes.create({'body': 'This is an issue note'}) -assert(len(issue1.notes.list()) == 1) -emoji = note.awardemojis.create({'name': 'tractor'}) -assert(len(note.awardemojis.list()) == 1) +assert len(admin_project.issues.list(state="closed")) == 1 +assert len(admin_project.issues.list(state="opened")) == 2 +assert len(admin_project.issues.list(milestone="milestone1")) == 1 +assert m1.issues().next().title == "my issue 1" +note = issue1.notes.create({"body": "This is an issue note"}) +assert len(issue1.notes.list()) == 1 +emoji = note.awardemojis.create({"name": "tractor"}) +assert len(note.awardemojis.list()) == 1 emoji.delete() -assert(len(note.awardemojis.list()) == 0) +assert len(note.awardemojis.list()) == 0 note.delete() -assert(len(issue1.notes.list()) == 0) -assert(isinstance(issue1.user_agent_detail(), dict)) +assert len(issue1.notes.list()) == 0 +assert isinstance(issue1.user_agent_detail(), dict) -assert(issue1.user_agent_detail()['user_agent']) -assert(issue1.participants()) +assert issue1.user_agent_detail()["user_agent"] +assert issue1.participants() # issues labels and events -label2 = admin_project.labels.create({'name': 'label2', 'color': '#aabbcc'}) -issue1.labels = ['label2'] +label2 = admin_project.labels.create({"name": "label2", "color": "#aabbcc"}) +issue1.labels = ["label2"] issue1.save() events = issue1.resourcelabelevents.list() -assert(events) +assert events event = issue1.resourcelabelevents.get(events[0].id) -assert(event) +assert event -discussion = issue1.discussions.create({'body': 'Discussion body'}) -assert(len(issue1.discussions.list()) == 1) -d_note = discussion.notes.create({'body': 'first note'}) +discussion = issue1.discussions.create({"body": "Discussion body"}) +assert len(issue1.discussions.list()) == 1 +d_note = discussion.notes.create({"body": "first note"}) d_note_from_get = discussion.notes.get(d_note.id) -d_note_from_get.body = 'updated body' +d_note_from_get.body = "updated body" d_note_from_get.save() discussion = issue1.discussions.get(discussion.id) -assert(discussion.attributes['notes'][-1]['body'] == 'updated body') +assert discussion.attributes["notes"][-1]["body"] == "updated body" d_note_from_get.delete() discussion = issue1.discussions.get(discussion.id) -assert(len(discussion.attributes['notes']) == 1) +assert len(discussion.attributes["notes"]) == 1 # tags -tag1 = admin_project.tags.create({'tag_name': 'v1.0', 'ref': 'master'}) -assert(len(admin_project.tags.list()) == 1) -tag1.set_release_description('Description 1') -tag1.set_release_description('Description 2') -assert(tag1.release['description'] == 'Description 2') +tag1 = admin_project.tags.create({"tag_name": "v1.0", "ref": "master"}) +assert len(admin_project.tags.list()) == 1 +tag1.set_release_description("Description 1") +tag1.set_release_description("Description 2") +assert tag1.release["description"] == "Description 2" tag1.delete() # project snippet admin_project.snippets_enabled = True admin_project.save() snippet = admin_project.snippets.create( - {'title': 'snip1', 'file_name': 'foo.py', 'code': 'initial content', - 'visibility': gitlab.v4.objects.VISIBILITY_PRIVATE} + { + "title": "snip1", + "file_name": "foo.py", + "code": "initial content", + "visibility": gitlab.v4.objects.VISIBILITY_PRIVATE, + } ) -assert(snippet.user_agent_detail()['user_agent']) +assert snippet.user_agent_detail()["user_agent"] -discussion = snippet.discussions.create({'body': 'Discussion body'}) -assert(len(snippet.discussions.list()) == 1) -d_note = discussion.notes.create({'body': 'first note'}) +discussion = snippet.discussions.create({"body": "Discussion body"}) +assert len(snippet.discussions.list()) == 1 +d_note = discussion.notes.create({"body": "first note"}) d_note_from_get = discussion.notes.get(d_note.id) -d_note_from_get.body = 'updated body' +d_note_from_get.body = "updated body" d_note_from_get.save() discussion = snippet.discussions.get(discussion.id) -assert(discussion.attributes['notes'][-1]['body'] == 'updated body') +assert discussion.attributes["notes"][-1]["body"] == "updated body" d_note_from_get.delete() discussion = snippet.discussions.get(discussion.id) -assert(len(discussion.attributes['notes']) == 1) +assert len(discussion.attributes["notes"]) == 1 -snippet.file_name = 'bar.py' +snippet.file_name = "bar.py" snippet.save() snippet = admin_project.snippets.get(snippet.id) -assert(snippet.content().decode() == 'initial content') -assert(snippet.file_name == 'bar.py') +assert snippet.content().decode() == "initial content" +assert snippet.file_name == "bar.py" size = len(admin_project.snippets.list()) snippet.delete() -assert(len(admin_project.snippets.list()) == (size - 1)) +assert len(admin_project.snippets.list()) == (size - 1) # triggers -tr1 = admin_project.triggers.create({'description': 'trigger1'}) -assert(len(admin_project.triggers.list()) == 1) +tr1 = admin_project.triggers.create({"description": "trigger1"}) +assert len(admin_project.triggers.list()) == 1 tr1.delete() # variables -v1 = admin_project.variables.create({'key': 'key1', 'value': 'value1'}) -assert(len(admin_project.variables.list()) == 1) -v1.value = 'new_value1' +v1 = admin_project.variables.create({"key": "key1", "value": "value1"}) +assert len(admin_project.variables.list()) == 1 +v1.value = "new_value1" v1.save() v1 = admin_project.variables.get(v1.key) -assert(v1.value == 'new_value1') +assert v1.value == "new_value1" v1.delete() # branches and merges -to_merge = admin_project.branches.create({'branch': 'branch1', - 'ref': 'master'}) -admin_project.files.create({'file_path': 'README2.rst', - 'branch': 'branch1', - 'content': 'Initial content', - 'commit_message': 'New commit in new branch'}) -mr = admin_project.mergerequests.create({'source_branch': 'branch1', - 'target_branch': 'master', - 'title': 'MR readme2'}) +to_merge = admin_project.branches.create({"branch": "branch1", "ref": "master"}) +admin_project.files.create( + { + "file_path": "README2.rst", + "branch": "branch1", + "content": "Initial content", + "commit_message": "New commit in new branch", + } +) +mr = admin_project.mergerequests.create( + {"source_branch": "branch1", "target_branch": "master", "title": "MR readme2"} +) # discussion -discussion = mr.discussions.create({'body': 'Discussion body'}) -assert(len(mr.discussions.list()) == 1) -d_note = discussion.notes.create({'body': 'first note'}) +discussion = mr.discussions.create({"body": "Discussion body"}) +assert len(mr.discussions.list()) == 1 +d_note = discussion.notes.create({"body": "first note"}) d_note_from_get = discussion.notes.get(d_note.id) -d_note_from_get.body = 'updated body' +d_note_from_get.body = "updated body" d_note_from_get.save() discussion = mr.discussions.get(discussion.id) -assert(discussion.attributes['notes'][-1]['body'] == 'updated body') +assert discussion.attributes["notes"][-1]["body"] == "updated body" d_note_from_get.delete() discussion = mr.discussions.get(discussion.id) -assert(len(discussion.attributes['notes']) == 1) +assert len(discussion.attributes["notes"]) == 1 # mr labels and events -mr.labels = ['label2'] +mr.labels = ["label2"] mr.save() events = mr.resourcelabelevents.list() -assert(events) +assert events event = mr.resourcelabelevents.get(events[0].id) -assert(event) +assert event # basic testing: only make sure that the methods exist mr.commits() mr.changes() -assert(mr.participants()) +assert mr.participants() mr.merge() -admin_project.branches.delete('branch1') +admin_project.branches.delete("branch1") try: mr.merge() @@ -660,52 +692,52 @@ except gitlab.GitlabMRClosedError: pass # protected branches -p_b = admin_project.protectedbranches.create({'name': '*-stable'}) -assert(p_b.name == '*-stable') -p_b = admin_project.protectedbranches.get('*-stable') +p_b = admin_project.protectedbranches.create({"name": "*-stable"}) +assert p_b.name == "*-stable" +p_b = admin_project.protectedbranches.get("*-stable") # master is protected by default when a branch has been created -assert(len(admin_project.protectedbranches.list()) == 2) -admin_project.protectedbranches.delete('master') +assert len(admin_project.protectedbranches.list()) == 2 +admin_project.protectedbranches.delete("master") p_b.delete() -assert(len(admin_project.protectedbranches.list()) == 0) +assert len(admin_project.protectedbranches.list()) == 0 # stars admin_project.star() -assert(admin_project.star_count == 1) +assert admin_project.star_count == 1 admin_project.unstar() -assert(admin_project.star_count == 0) +assert admin_project.star_count == 0 # project boards -#boards = admin_project.boards.list() -#assert(len(boards)) -#board = boards[0] -#lists = board.lists.list() -#begin_size = len(lists) -#last_list = lists[-1] -#last_list.position = 0 -#last_list.save() -#last_list.delete() -#lists = board.lists.list() -#assert(len(lists) == begin_size - 1) +# boards = admin_project.boards.list() +# assert(len(boards)) +# board = boards[0] +# lists = board.lists.list() +# begin_size = len(lists) +# last_list = lists[-1] +# last_list.position = 0 +# last_list.save() +# last_list.delete() +# lists = board.lists.list() +# assert(len(lists) == begin_size - 1) # project badges -badge_image = 'http://example.com' -badge_link = 'http://example/img.svg' -badge = admin_project.badges.create({'link_url': badge_link, 'image_url': badge_image}) -assert(len(admin_project.badges.list()) == 1) -badge.image_url = 'http://another.example.com' +badge_image = "http://example.com" +badge_link = "http://example/img.svg" +badge = admin_project.badges.create({"link_url": badge_link, "image_url": badge_image}) +assert len(admin_project.badges.list()) == 1 +badge.image_url = "http://another.example.com" badge.save() badge = admin_project.badges.get(badge.id) -assert(badge.image_url == 'http://another.example.com') +assert badge.image_url == "http://another.example.com" badge.delete() -assert(len(admin_project.badges.list()) == 0) +assert len(admin_project.badges.list()) == 0 # project wiki -wiki_content = 'Wiki page content' -wp = admin_project.wikis.create({'title': 'wikipage', 'content': wiki_content}) -assert(len(admin_project.wikis.list()) == 1) +wiki_content = "Wiki page content" +wp = admin_project.wikis.create({"title": "wikipage", "content": wiki_content}) +assert len(admin_project.wikis.list()) == 1 wp = admin_project.wikis.get(wp.slug) -assert(wp.content == wiki_content) +assert wp.content == wiki_content # update and delete seem broken # wp.content = 'new content' # wp.save() @@ -714,66 +746,67 @@ assert(wp.content == wiki_content) # namespaces ns = gl.namespaces.list(all=True) -assert(len(ns) != 0) -ns = gl.namespaces.list(search='root', all=True)[0] -assert(ns.kind == 'user') +assert len(ns) != 0 +ns = gl.namespaces.list(search="root", all=True)[0] +assert ns.kind == "user" # features -feat = gl.features.set('foo', 30) -assert(feat.name == 'foo') -assert(len(gl.features.list()) == 1) +feat = gl.features.set("foo", 30) +assert feat.name == "foo" +assert len(gl.features.list()) == 1 feat.delete() -assert(len(gl.features.list()) == 0) +assert len(gl.features.list()) == 0 # broadcast messages -msg = gl.broadcastmessages.create({'message': 'this is the message'}) -msg.color = '#444444' +msg = gl.broadcastmessages.create({"message": "this is the message"}) +msg.color = "#444444" msg.save() msg = gl.broadcastmessages.list(all=True)[0] -assert(msg.color == '#444444') +assert msg.color == "#444444" msg = gl.broadcastmessages.get(1) -assert(msg.color == '#444444') +assert msg.color == "#444444" msg.delete() -assert(len(gl.broadcastmessages.list()) == 0) +assert len(gl.broadcastmessages.list()) == 0 # notification settings settings = gl.notificationsettings.get() settings.level = gitlab.NOTIFICATION_LEVEL_WATCH settings.save() settings = gl.notificationsettings.get() -assert(settings.level == gitlab.NOTIFICATION_LEVEL_WATCH) +assert settings.level == gitlab.NOTIFICATION_LEVEL_WATCH # services -service = admin_project.services.get('asana') -service.api_key = 'whatever' +service = admin_project.services.get("asana") +service.api_key = "whatever" service.save() -service = admin_project.services.get('asana') -assert(service.active == True) +service = admin_project.services.get("asana") +assert service.active == True service.delete() -service = admin_project.services.get('asana') -assert(service.active == False) +service = admin_project.services.get("asana") +assert service.active == False # snippets snippets = gl.snippets.list(all=True) -assert(len(snippets) == 0) -snippet = gl.snippets.create({'title': 'snippet1', 'file_name': 'snippet1.py', - 'content': 'import gitlab'}) +assert len(snippets) == 0 +snippet = gl.snippets.create( + {"title": "snippet1", "file_name": "snippet1.py", "content": "import gitlab"} +) snippet = gl.snippets.get(snippet.id) -snippet.title = 'updated_title' +snippet.title = "updated_title" snippet.save() snippet = gl.snippets.get(snippet.id) -assert(snippet.title == 'updated_title') +assert snippet.title == "updated_title" content = snippet.content() -assert(content.decode() == 'import gitlab') +assert content.decode() == "import gitlab" -assert(snippet.user_agent_detail()['user_agent']) +assert snippet.user_agent_detail()["user_agent"] snippet.delete() snippets = gl.snippets.list(all=True) -assert(len(snippets) == 0) +assert len(snippets) == 0 # user activities -gl.user_activities.list(query_parameters={'from': '2019-01-01'}) +gl.user_activities.list(query_parameters={"from": "2019-01-01"}) # events gl.events.list() @@ -786,19 +819,18 @@ settings.throttle_authenticated_api_period_in_seconds = 3 settings.save() projects = list() for i in range(0, 20): - projects.append(gl.projects.create( - {'name': str(i) + "ok"})) + projects.append(gl.projects.create({"name": str(i) + "ok"})) error_message = None for i in range(20, 40): try: projects.append( - gl.projects.create( - {'name': str(i) + 'shouldfail'}, obey_rate_limit=False)) + gl.projects.create({"name": str(i) + "shouldfail"}, obey_rate_limit=False) + ) except gitlab.GitlabCreateError as e: error_message = e.error_message break -assert 'Retry later' in error_message +assert "Retry later" in error_message [current_project.delete() for current_project in projects] settings.throttle_authenticated_api_enabled = False settings.save() @@ -807,22 +839,23 @@ settings.save() ex = admin_project.exports.create({}) ex.refresh() count = 0 -while ex.export_status != 'finished': +while ex.export_status != "finished": time.sleep(1) ex.refresh() count += 1 if count == 10: - raise Exception('Project export taking too much time') -with open('/tmp/gitlab-export.tgz', 'wb') as f: + raise Exception("Project export taking too much time") +with open("/tmp/gitlab-export.tgz", "wb") as f: ex.download(streamed=True, action=f.write) -output = gl.projects.import_project(open('/tmp/gitlab-export.tgz', 'rb'), - 'imported_project') -project_import = gl.projects.get(output['id'], lazy=True).imports.get() +output = gl.projects.import_project( + open("/tmp/gitlab-export.tgz", "rb"), "imported_project" +) +project_import = gl.projects.get(output["id"], lazy=True).imports.get() count = 0 -while project_import.import_status != 'finished': +while project_import.import_status != "finished": time.sleep(1) project_import.refresh() count += 1 if count == 10: - raise Exception('Project import taking too much time') + raise Exception("Project import taking too much time") |