77from optparse import OptionParser
88import os
99try :
10- import gitlab3 as gitlab
10+ import gitlab
1111except ImportError :
12- raise ImportError ("python-gitlab3 module is not installed. You probably didn't read the install instructions closely enough. See docs/prerequisites.md." )
12+ raise ImportError ("python-gitlab module is not installed. You probably didn't read the install instructions closely enough. See docs/prerequisites.md." )
1313
1414
1515
1919 gitlab_namespace = os .environ ['gitlab_namespace' ]
2020 gitlab_user = os .environ ['gitlab_user' ]
2121 ssl_verify = os .environ ['ssl_verify' ]
22+ gitlab_api_version = os .environ ['gitlab_api_version' ]
2223except KeyError :
2324 print >> stderr , "Environment config missing. Do not run this script standalone."
2425 exit (1 )
4445project_name = args [0 ]
4546
4647if not eval (ssl_verify .capitalize ()):
47- git = gitlab .GitLab (gitlab_url = gitlab_url , token = token_secret ,ssl_verify = False )
48+ git = gitlab .Gitlab (gitlab_url , token_secret ,ssl_verify = False , api_version = gitlab_api_version )
4849else :
49- git = gitlab .GitLab (gitlab_url = gitlab_url ,token = token_secret ,ssl_verify = True )
50+ git = gitlab .Gitlab (gitlab_url ,token_secret ,ssl_verify = True ,api_version = gitlab_api_version )
51+
52+ def find_group (** kwargs ):
53+ groups = git .groups .list ()
54+ return _find_matches (groups , kwargs , False )
55+
56+ def find_project (** kwargs ):
57+ projects = git .projects .list (as_list = True )
58+ return _find_matches (projects , kwargs , False )
59+
60+ def _find_matches (objects , kwargs , find_all ):
61+ """Helper function for _add_find_fn. Find objects whose properties
62+ match all key, value pairs in kwargs.
63+ Source: https://github.com/doctormo/python-gitlab3/blob/master/gitlab3/__init__.py
64+ """
65+ ret = []
66+ for obj in objects :
67+ match = True
68+ # Match all supplied parameters
69+ for param , val in kwargs .items ():
70+ if not getattr (obj , param ) == val :
71+ match = False
72+ break
73+ if match :
74+ if find_all :
75+ ret .append (obj )
76+ else :
77+ return obj
78+ if not find_all :
79+ return None
80+ return ret
5081
5182# transfer the project from the source namespace to the specified group namespace
5283def transfer_project (src_project , group ):
5384 value = group .transfer_project (src_project .id )
54- dest_project = git . find_project (name = src_project .name )
85+ dest_project = find_project (name = src_project .name )
5586 return dest_project
5687
5788def createproject (pname ):
@@ -69,14 +100,16 @@ def createproject(pname):
69100 'wiki_enabled' : options .wiki ,
70101 'snippets_enabled' : options .snippets ,
71102 'public' : options .public ,
72- 'namespace_id' : git . find_group (name = gitlab_namespace ).id ,
103+ 'namespace_id' : find_group (name = gitlab_namespace ).id ,
73104 }
74105 #make all project options lowercase boolean strings i.e. true instead of True
75106 for x in project_options .keys ():
76107 project_options [x ] = str (project_options [x ]).lower ()
77108 print >> stderr , "Creating new project %s" % pname
78- git .add_project (pname ,description = description ,** project_options )
79- found_project = git .find_project (name = pname )
109+ project_options ['name' ] = pname
110+ project_options ['description' ] = description
111+ git .projects .create (project_options )
112+ found_project = find_project (name = pname )
80113 if needs_transfer (gitlab_user , gitlab_namespace , found_project ):
81114 found_project = transfer_project (found_project , found_group )
82115 return found_project
@@ -88,13 +121,19 @@ def needs_transfer(user, groupname, project):
88121 namespace = groupname
89122 else :
90123 namespace = user
91- return project .namespace ['name' ] != namespace
124+ if type (project .namespace ) == gitlab .v3 .objects .Group :
125+ return project .namespace .name != namespace
126+ else :
127+ return project .namespace ['name' ] != namespace
128+
92129
93130if options .create :
94- found_group = git . find_group (name = gitlab_namespace )
131+ found_group = find_group (name = gitlab_namespace )
95132 found_project = None
96- # search the group namespace first
97- found_project = git .find_project (name = project_name )
133+
134+ found_project = find_project (name = project_name )
135+ #exit()
136+
98137 if found_project :
99138 if needs_transfer (gitlab_user , gitlab_namespace , found_project ):
100139 found_project = transfer_project (found_project , found_group )
@@ -112,7 +151,7 @@ def needs_transfer(user, groupname, project):
112151 print found_project .ssh_url_to_repo
113152elif options .delete :
114153 try :
115- deleted_project = git . find_project (name = project_name ).delete ()
154+ deleted_project = find_project (name = project_name ).delete ()
116155 except Exception as e :
117156 print >> stderr , e
118157 exit (1 )
0 commit comments