def __init__(self, *args, **kwargs): self.project = kwargs.pop('project') self.provider_key = kwargs.pop('provider_key', None) super().__init__(*args, **kwargs) # get the provider if self.provider_key: self.provider = get_plugin('SERVICE_PROVIDERS', self.provider_key) else: self.provider = self.instance.provider # add fields for the integration options for field in self.provider.fields: try: initial = IntegrationOption.objects.get( integration=self.instance, key=field.get('key')).value except IntegrationOption.DoesNotExist: initial = None if field.get('placeholder'): attrs = {'placeholder': field.get('placeholder')} self.fields[field.get('key')] = forms.CharField( widget=forms.TextInput(attrs=attrs), initial=initial, required=field.get('required', True))
def post(self, request, *args, **kwargs): self.object = self.get_object() current_project = self.object import_tmpfile_name = request.session.get('update_import_tmpfile_name') import_key = request.session.get('update_import_key') checked = [key for key, value in request.POST.items() if 'on' in value] if import_tmpfile_name and import_key: import_plugin = get_plugin('PROJECT_IMPORTS', import_key) import_plugin.file_name = import_tmpfile_name import_plugin.current_project = current_project if import_plugin.check(): try: import_plugin.process() except ValidationError as e: return render(request, 'core/error.html', { 'title': _('Import error'), 'errors': e }, status=400) save_import_values(current_project, import_plugin.values, checked) save_import_tasks(current_project, import_plugin.tasks) save_import_views(current_project, import_plugin.views) return HttpResponseRedirect(current_project.get_absolute_url()) return render(request, 'core/error.html', { 'title': _('Import error'), 'errors': [_('There has been an error with your import.')] }, status=400)
def __call__(self, data): provider_key = data.get('provider_key') provider = get_plugin('PROJECT_ISSUE_PROVIDERS', provider_key) if provider is None: raise ValidationError( {'provider_key': 'Please provide a valid provider.'}) try: options = { option.get('key'): option.get('value') for option in data.get('options', []) } except KeyError: raise ValidationError({ 'options': 'Options need to be of the form "{"key": "": "value": ""}".' }) for key in options: if key not in [field.get('key') for field in provider.fields]: raise ValidationError( {'options': 'Key "{}" is not valid.'.format(key)}) for field in provider.fields: if field.get('required', True) and field.get('key') not in options: raise ValidationError({ 'options': 'Key "{}" is required.'.format(field.get('key')) })
def get_export_plugin(self): export_plugin = get_plugin('PROJECT_EXPORTS', self.kwargs.get('format')) if export_plugin is None: raise Http404 export_plugin.request = self.request export_plugin.project = self.object return export_plugin
def get_import_plugin(self, key, current_project=None): import_plugin = get_plugin('PROJECT_IMPORTS', key) if import_plugin is None: raise Http404 import_plugin.request = self.request import_plugin.current_project = current_project return import_plugin
def render_to_response(self, context, **response_kwargs): export_plugin = get_plugin('PROJECT_EXPORTS', self.kwargs.get('format')) if export_plugin is None: raise Http404 export_plugin.project = context['project'] export_plugin.snapshot = None return export_plugin.render()
def export_projects(self): for project in self.get_queryset(): export_plugin = get_plugin('PROJECT_EXPORTS', self.format) if export_plugin is None: raise CommandError('Format "{}" is not supported.'.format( self.format)) export_plugin.project = project export_plugin.snapshot = None response = export_plugin.render() self.write_file(self.path / str(project.id), response)
def oauth_callback(request, provider_key): provider = get_plugin('SERVICE_PROVIDERS', provider_key) try: return provider.callback(request) except AssertionError: return render( request, 'core/error.html', { 'title': _('Integration Error'), 'errors': [_('Something went wrong. Please contact support.')] }, status=500)
def oauth_callback(request, provider_key): for provider_type in PROVIDER_TYPES: provider = get_plugin(provider_type, provider_key) if provider and provider.get_from_session(request, 'state'): return provider.callback(request) return render( request, 'core/error.html', { 'title': _('Integration Error'), 'errors': [_('Something went wrong. Please contact support.')] }, status=500)
def post(self, request, *args, **kwargs): import_tmpfile_name = request.session.get('create_import_tmpfile_name') import_key = request.session.get('create_import_key') checked = [key for key, value in request.POST.items() if 'on' in value] if import_tmpfile_name and import_key: import_plugin = get_plugin('PROJECT_IMPORTS', import_key) import_plugin.file_name = import_tmpfile_name if import_plugin.check(): try: import_plugin.process() except ValidationError as e: return render(request, 'core/error.html', { 'title': _('Import error'), 'errors': e }, status=400) # add current site and save project import_plugin.project.site = get_current_site(self.request) import_plugin.project.save() # add user to project membership = Membership(project=import_plugin.project, user=request.user, role='owner') membership.save() save_import_values(import_plugin.project, import_plugin.values, checked) save_import_snapshot_values(import_plugin.project, import_plugin.snapshots, checked) save_import_tasks(import_plugin.project, import_plugin.tasks) save_import_views(import_plugin.project, import_plugin.views) return HttpResponseRedirect(import_plugin.project.get_absolute_url()) return render(request, 'core/error.html', { 'title': _('Import error'), 'errors': [_('There has been an error with your import.')] }, status=400)
def provider(self): return get_plugin('SERVICE_PROVIDERS', self.provider_key)
def get_context_data(self, **kwargs): kwargs['provider'] = get_plugin('SERVICE_PROVIDERS', self.provider_key) return super().get_context_data(**kwargs)
def provider(self): return get_plugin('OPTIONSET_PROVIDERS', self.provider_key)
def import_file(self): current_project = self.object import_tmpfile_name = self.request.session.get( 'update_import_tmpfile_name') import_key = self.request.session.get('update_import_key') checked = [ key for key, value in self.request.POST.items() if 'on' in value ] if import_tmpfile_name and import_key: import_plugin = get_plugin('PROJECT_IMPORTS', import_key) import_plugin.file_name = import_tmpfile_name import_plugin.current_project = current_project if import_plugin.check(): try: import_plugin.process() except ValidationError as e: return render(self.request, 'core/error.html', { 'title': _('Import error'), 'errors': e }, status=400) # attach questions and current values self.update_values(current_project, import_plugin.catalog, import_plugin.values, import_plugin.snapshots) if current_project: save_import_values(self.object, import_plugin.values, checked) save_import_tasks(self.object, import_plugin.tasks) save_import_views(self.object, import_plugin.views) return HttpResponseRedirect( current_project.get_absolute_url()) else: # add current site and save project import_plugin.project.site = get_current_site(self.request) import_plugin.project.save() # add user to project membership = Membership(project=import_plugin.project, user=self.request.user, role='owner') membership.save() for value in import_plugin.values: value.current = None save_import_values(import_plugin.project, import_plugin.values, checked) save_import_snapshot_values(import_plugin.project, import_plugin.snapshots, checked) save_import_tasks(import_plugin.project, import_plugin.tasks) save_import_views(import_plugin.project, import_plugin.views) return HttpResponseRedirect( import_plugin.project.get_absolute_url())
def provider(self): return get_plugin('PROJECT_ISSUE_PROVIDERS', self.provider_key)
def get_widget_class(key): widget = get_plugin('QUESTIONS_WIDGETS', key) return widget.widget_class