Exemple #1
0
    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))
Exemple #2
0
    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)
Exemple #3
0
    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'))
                })
Exemple #4
0
    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
Exemple #5
0
    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
Exemple #6
0
    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()
Exemple #7
0
    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)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
    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)
Exemple #11
0
 def provider(self):
     return get_plugin('SERVICE_PROVIDERS', self.provider_key)
Exemple #12
0
 def get_context_data(self, **kwargs):
     kwargs['provider'] = get_plugin('SERVICE_PROVIDERS', self.provider_key)
     return super().get_context_data(**kwargs)
Exemple #13
0
 def provider(self):
     return get_plugin('OPTIONSET_PROVIDERS', self.provider_key)
Exemple #14
0
    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())
Exemple #15
0
 def provider(self):
     return get_plugin('PROJECT_ISSUE_PROVIDERS', self.provider_key)
Exemple #16
0
def get_widget_class(key):
    widget = get_plugin('QUESTIONS_WIDGETS', key)
    return widget.widget_class