Fix Jenkins compatibility with Review Board 3.0.
Review Request #10980 — Created March 27, 2020 and submitted
The new Jenkins integration is mostly fine running on top of old Review
Board versions, but there was one utility class that was renamed. This
change fixes it to use the correct import for both 3.0 and 4.0.
Was able to load the master branch of the rbintegrations extension on
Review Board 3.0.x.
Summary | ID |
---|---|
ee6ed03e7323ea36200607388c687795b2424536 |
Description | From | Last Updated |
---|---|---|
Hi David, This fix alone was not enough, because the classes are not equivalent. I can confirm that, as mentioned … |
YX yxejamir |
-
-
Hi David,
This fix alone was not enough, because the classes are not equivalent. I can confirm that, as mentioned in Testing Done, the extension is able to load on Review Board 3.0.18. However, as soon as I try to add an integration, it fails on an
AttributeError
in the following line, see below.File "/usr/local/lib/python2.7/dist-packages/rbintegrations/jenkinsci/api.py" in _make_raw_request 208. response = request.open()
Full traceback:
Environment: Request Method: POST Request URL: https://reviewboard.example.com/admin/integrations/rbintegrations.jenkinsci.integration.JenkinsCIIntegration/configs/add/ Django Version: 1.6.11 Python Version: 2.7.12 Installed Applications: [u'corsheaders', u'django.contrib.admin', u'django.contrib.auth', u'django.contrib.contenttypes', u'django.contrib.sites', u'django.contrib.sessions', u'django.contrib.staticfiles', u'djblets', u'djblets.avatars', u'djblets.configforms', u'djblets.datagrid', u'djblets.extensions', u'djblets.features', u'djblets.feedview', u'djblets.forms', u'djblets.gravatars', u'djblets.integrations', u'djblets.log', u'djblets.pipeline', u'djblets.privacy', u'djblets.recaptcha', u'djblets.siteconfig', u'djblets.util', u'haystack', u'oauth2_provider', u'pipeline', u'reviewboard', u'reviewboard.accounts', u'reviewboard.admin', u'reviewboard.attachments', u'reviewboard.avatars', u'reviewboard.changedescs', u'reviewboard.diffviewer', u'reviewboard.extensions', u'reviewboard.hostingsvcs', u'reviewboard.integrations', u'reviewboard.notifications', u'reviewboard.oauth', u'reviewboard.reviews', u'reviewboard.scmtools', u'reviewboard.site', u'reviewboard.webapi', u'django_evolution', u'rbintegrations'] Installed Middleware: [u'django.middleware.gzip.GZipMiddleware', u'reviewboard.admin.middleware.InitReviewBoardMiddleware', u'corsheaders.middleware.CorsMiddleware', u'django.middleware.clickjacking.XFrameOptionsMiddleware', u'django.middleware.common.CommonMiddleware', u'django.middleware.http.ConditionalGetMiddleware', u'django.middleware.locale.LocaleMiddleware', u'django.contrib.sessions.middleware.SessionMiddleware', u'django.contrib.auth.middleware.AuthenticationMiddleware', u'django.contrib.messages.middleware.MessageMiddleware', u'djblets.siteconfig.middleware.SettingsMiddleware', u'reviewboard.admin.middleware.LoadSettingsMiddleware', u'djblets.extensions.middleware.ExtensionsMiddleware', u'djblets.integrations.middleware.IntegrationsMiddleware', u'djblets.log.middleware.LoggingMiddleware', u'reviewboard.accounts.middleware.TimezoneMiddleware', u'reviewboard.accounts.middleware.UpdateLastLoginMiddleware', u'reviewboard.admin.middleware.CheckUpdatesRequiredMiddleware', u'reviewboard.accounts.middleware.X509AuthMiddleware', u'reviewboard.site.middleware.LocalSiteMiddleware', u'djblets.extensions.middleware.ExtensionsMiddlewareRunner', u'reviewboard.admin.middleware.ExtraExceptionInfoMiddleware'] Traceback: File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 112. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in view 69. return self.dispatch(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper 29. return bound_func(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/views/decorators.py" in _checklogin 17. return view_func(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func 25. return func(self, *args2, **kwargs2) File "/usr/local/lib/python2.7/dist-packages/djblets/integrations/views.py" in dispatch 446. *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper 29. return bound_func(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view 22. return view_func(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func 25. return func(self, *args2, **kwargs2) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper 29. return bound_func(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view 99. response = view_func(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func 25. return func(self, *args2, **kwargs2) File "/usr/local/lib/python2.7/dist-packages/djblets/integrations/views.py" in dispatch 286. request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in dispatch 87. return handler(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/generic/edit.py" in post 170. if form.is_valid(): File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in is_valid 129. return self.is_bound and not bool(self.errors) File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in errors 121. self.full_clean() File "/usr/local/lib/python2.7/dist-packages/reviewboard/site/mixins.py" in full_clean 275. return super(LocalSiteAwareModelFormMixin, self).full_clean() File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in full_clean 274. self._clean_form() File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in _clean_form 300. self.cleaned_data = self.clean() File "/usr/local/lib/python2.7/dist-packages/rbintegrations/jenkinsci/forms.py" in clean 103. api.test_connection() File "/usr/local/lib/python2.7/dist-packages/rbintegrations/jenkinsci/api.py" in test_connection 59. method='GET') File "/usr/local/lib/python2.7/dist-packages/rbintegrations/jenkinsci/api.py" in _make_request 155. self._fetch_csrf_token() File "/usr/local/lib/python2.7/dist-packages/rbintegrations/jenkinsci/api.py" in _fetch_csrf_token 117. % self.endpoint) File "/usr/local/lib/python2.7/dist-packages/rbintegrations/jenkinsci/api.py" in _make_raw_request 208. response = request.open() File "/usr/lib/python2.7/urllib2.py" in __getattr__ 254. raise AttributeError, attr Exception Type: AttributeError at /admin/integrations/rbintegrations.jenkinsci.integration.JenkinsCIIntegration/configs/add/ Exception Value: open