コード例 #1
0
ファイル: views.py プロジェクト: zhangtiny123/awx
    def get_queryset(self):
        self.category_slug = self.kwargs.get('category_slug', 'all')
        all_category_slugs = settings_registry.get_registered_categories(
            features_enabled=get_licensed_features()).keys()
        for slug_to_delete in VERSION_SPECIFIC_CATEGORIES_TO_EXCLUDE[
                get_request_version(self.request)]:
            all_category_slugs.remove(slug_to_delete)
        if self.request.user.is_superuser or getattr(
                self.request.user, 'is_system_auditor', False):
            category_slugs = all_category_slugs
        else:
            category_slugs = {'user'}
        if self.category_slug not in all_category_slugs:
            raise Http404
        if self.category_slug not in category_slugs:
            raise PermissionDenied()

        registered_settings = settings_registry.get_registered_settings(
            category_slug=self.category_slug,
            read_only=False,
            features_enabled=get_licensed_features(),
            slugs_to_ignore=VERSION_SPECIFIC_CATEGORIES_TO_EXCLUDE[
                get_request_version(self.request)])
        if self.category_slug == 'user':
            return Setting.objects.filter(key__in=registered_settings,
                                          user=self.request.user)
        else:
            return Setting.objects.filter(key__in=registered_settings,
                                          user__isnull=True)
コード例 #2
0
 def get_fields(self):
     fields = super(SettingSingletonSerializer, self).get_fields()
     try:
         category_slug = self.context['view'].kwargs.get('category_slug', 'all')
     except (KeyError, AttributeError):
         category_slug = ''
     for key in settings_registry.get_registered_settings(category_slug=category_slug):
         if self.instance and not hasattr(self.instance, key):
             continue
         extra_kwargs = {}
         # Make LICENSE read-only here; LICENSE is only updated via /api/v2/config/
         if key == 'LICENSE':
             extra_kwargs['read_only'] = True
         field = settings_registry.get_setting_field(key, mixin_class=SettingFieldMixin, for_user=bool(category_slug == 'user'), **extra_kwargs)
         fields[key] = field
     return fields
コード例 #3
0
ファイル: views.py プロジェクト: zhangtiny123/awx
    def post(self, request, *args, **kwargs):
        defaults = dict()
        for key in settings_registry.get_registered_settings(
                category_slug='logging'):
            try:
                defaults[key] = settings_registry.get_setting_field(
                    key).get_default()
            except serializers.SkipField:
                defaults[key] = None
        obj = type('Settings', (object, ), defaults)()
        serializer = self.get_serializer(obj, data=request.data)
        serializer.is_valid(raise_exception=True)
        # Special validation specific to logging test.
        errors = {}
        for key in ['LOG_AGGREGATOR_TYPE', 'LOG_AGGREGATOR_HOST']:
            if not request.data.get(key, ''):
                errors[key] = 'This field is required.'
        if errors:
            raise ValidationError(errors)

        if request.data.get('LOG_AGGREGATOR_PASSWORD',
                            '').startswith('$encrypted$'):
            serializer.validated_data['LOG_AGGREGATOR_PASSWORD'] = getattr(
                settings, 'LOG_AGGREGATOR_PASSWORD', '')

        try:

            class MockSettings:
                pass

            mock_settings = MockSettings()
            for k, v in serializer.validated_data.items():
                setattr(mock_settings, k, v)
            mock_settings.LOG_AGGREGATOR_LEVEL = 'DEBUG'
            if mock_settings.LOG_AGGREGATOR_PROTOCOL.upper() == 'UDP':
                UDPHandler.perform_test(mock_settings)
                return Response(status=status.HTTP_201_CREATED)
            else:
                BaseHTTPSHandler.perform_test(mock_settings)
        except LoggingConnectivityException as e:
            return Response({'error': str(e)},
                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        return Response(status=status.HTTP_200_OK)
コード例 #4
0
    def handle(self, *args, **options):
        self.verbosity = int(options.get('verbosity', 1))
        self.dry_run = bool(options.get('dry_run', False))
        self.skip_errors = bool(options.get('skip_errors', False))
        self.no_comment = bool(options.get('no_comment', False))
        self.comment_only = bool(options.get('comment_only', False))
        self.backup_suffix = options.get('backup_suffix', '')
        self.categories = options.get('category', None) or ['all']
        self.style.HEADING = self.style.MIGRATE_HEADING
        self.style.LABEL = self.style.MIGRATE_LABEL
        self.style.OK = self.style.SQL_FIELD
        self.style.SKIP = self.style.WARNING
        self.style.VALUE = self.style.SQL_KEYWORD

        # Determine if any categories provided are invalid.
        category_slugs = []
        invalid_categories = []
        for category in self.categories:
            category_slug = slugify(category)
            if category_slug in settings_registry.get_registered_categories():
                if category_slug not in category_slugs:
                    category_slugs.append(category_slug)
            else:
                if category not in invalid_categories:
                    invalid_categories.append(category)
        if len(invalid_categories) == 1:
            raise CommandError('Invalid setting category: {}'.format(
                invalid_categories[0]))
        elif len(invalid_categories) > 1:
            raise CommandError('Invalid setting categories: {}'.format(
                ', '.join(invalid_categories)))

        # Build a list of all settings to be migrated.
        registered_settings = []
        for category_slug in category_slugs:
            for registered_setting in settings_registry.get_registered_settings(
                    category_slug=category_slug, read_only=False):
                if registered_setting not in registered_settings:
                    registered_settings.append(registered_setting)

        self._migrate_settings(registered_settings)
コード例 #5
0
ファイル: views.py プロジェクト: vin-c/awx
 def get_object(self):
     settings_qs = self.get_queryset()
     registered_settings = settings_registry.get_registered_settings(
         category_slug=self.category_slug, )
     all_settings = {}
     for setting in settings_qs:
         all_settings[setting.key] = setting.value
     for key in registered_settings:
         if key in all_settings or self.category_slug == 'changed':
             continue
         try:
             field = settings_registry.get_setting_field(
                 key, for_user=bool(self.category_slug == 'user'))
             all_settings[key] = field.get_default()
         except serializers.SkipField:
             all_settings[key] = None
     all_settings[
         'user'] = self.request.user if self.category_slug == 'user' else None
     obj = type('Settings', (object, ), all_settings)()
     self.check_object_permissions(self.request, obj)
     return obj
コード例 #6
0
    def get_queryset(self):
        self.category_slug = self.kwargs.get('category_slug', 'all')
        all_category_slugs = list(
            settings_registry.get_registered_categories().keys())
        if self.request.user.is_superuser or getattr(
                self.request.user, 'is_system_auditor', False):
            category_slugs = all_category_slugs
        else:
            category_slugs = {'user'}
        if self.category_slug not in all_category_slugs:
            raise Http404
        if self.category_slug not in category_slugs:
            raise PermissionDenied()

        registered_settings = settings_registry.get_registered_settings(
            category_slug=self.category_slug, read_only=False)
        if self.category_slug == 'user':
            return Setting.objects.filter(key__in=registered_settings,
                                          user=self.request.user)
        else:
            return Setting.objects.filter(key__in=registered_settings,
                                          user__isnull=True)
コード例 #7
0
ファイル: views.py プロジェクト: zhangtiny123/awx
 def get_object(self):
     settings_qs = self.get_queryset()
     registered_settings = settings_registry.get_registered_settings(
         category_slug=self.category_slug,
         features_enabled=get_licensed_features(),
         slugs_to_ignore=VERSION_SPECIFIC_CATEGORIES_TO_EXCLUDE[
             get_request_version(self.request)])
     all_settings = {}
     for setting in settings_qs:
         all_settings[setting.key] = setting.value
     for key in registered_settings:
         if key in all_settings or self.category_slug == 'changed':
             continue
         try:
             field = settings_registry.get_setting_field(
                 key, for_user=bool(self.category_slug == 'user'))
             all_settings[key] = field.get_default()
         except serializers.SkipField:
             all_settings[key] = None
     all_settings[
         'user'] = self.request.user if self.category_slug == 'user' else None
     obj = type('Settings', (object, ), all_settings)()
     self.check_object_permissions(self.request, obj)
     return obj