コード例 #1
0
ファイル: hosts.py プロジェクト: vstconsulting/vstutils
 class Meta:
     _serializer_class = 'vstutils.api.serializers.VSTSerializer'
     _list_fields = ('name', 'local_filter_applied', 'filter_applied',
                     'string_filter_applied')
     _override_list_fields = {
         'id':
         fields.RedirectIntegerField(read_only=True,
                                     operation_name='files'),
         'name':
         fields.DependEnumField(field='id', choices={
             3: 'hello',
             1: 'NOO!'
         }),
         'local_filter_applied':
         fields.IntegerField(default=0, read_only=True),
         'filter_applied':
         fields.IntegerField(default=0, read_only=True),
         'string_filter_applied':
         DrfBooleanField(default=False, read_only=True)
     }
     _extra_serializer_classes = {
         'serializer_class_test': serializers.EmptySerializer
     }
     _filterset_fields = ('id', 'name')
     _filter_backends = (TestFilterBackend,
                         'test_proj.models.hosts.TestStringFilterBackend')
コード例 #2
0
class HostSerializer(VSTSerializer):
    id = fields.RedirectIntegerField(read_only=True)
    name = fields.DependEnumField(field='id', choices={ 3: 'hello', 1: 'NOO!' })

    class Meta:
        model = Host
        fields = (
            'id',
            'name',
        )
コード例 #3
0
ファイル: serializers.py プロジェクト: binchow-ai/polemarch
class InventoryVariableSerializer(VariableSerializer):
    key = vst_fields.AutoCompletionField(autocomplete=models.Variable.variables_keys)
    value = vst_fields.DependEnumField(
        allow_blank=True, field='key',
        types={
            'ansible_ssh_pass': '******',
            'ansible_ssh_private_key_file': 'secretfile',
            'ansible_become': 'boolean',
            'ansible_port': 'integer',
            'ansible_become_pass': '******',
        }
    )
コード例 #4
0
ファイル: serializers.py プロジェクト: logbie/polemarch
class ProjectVariableSerializer(VariableSerializer):
    key = vst_fields.AutoCompletionField(required=True,
                                         autocomplete=models.Project.VARS_KEY)
    value = vst_fields.DependEnumField(
        allow_blank=True,
        field='key',
        choices={
            'repo_type': list(models.Project.repo_handlers.keys()),
            'repo_sync_on_run': [True, False]
        },
        types={
            'repo_password': '******',
            'repo_key': 'secretfile'
        })
コード例 #5
0
class ProjectCreateMasterSerializer(vst_serializers.VSTSerializer):
    types = list_to_choices(models.Project.repo_handlers.keys())
    auth_types = list_to_choices(['NONE', 'KEY', 'PASSWORD'])

    status = vst_fields.VSTCharField(read_only=True)
    type = serializers.ChoiceField(choices=types,
                                   default='MANUAL',
                                   label='Repo type')
    repository = vst_fields.VSTCharField(default='MANUAL', label='Repo url')
    repo_auth = serializers.ChoiceField(choices=auth_types,
                                        default='NONE',
                                        label='Repo auth type',
                                        write_only=True)
    auth_data = vst_fields.DependEnumField(allow_blank=True,
                                           write_only=True,
                                           default='',
                                           field='repo_auth',
                                           label='Repo auth data',
                                           types={
                                               'KEY': 'secretfile',
                                               'PASSWORD': '******',
                                               'NONE': 'disabled'
                                           })

    class Meta:
        model = models.Project
        fields = (
            'id',
            'name',
            'status',
            'type',
            'repository',
            'repo_auth',
            'auth_data',
        )
        extra_kwargs = {'name': {'required': True}}

    def create(self, validated_data):
        repo_type = validated_data.pop('type')
        repo_auth_type = validated_data.pop('repo_auth')
        repo_auth_data = validated_data.pop('auth_data')

        instance = super(ProjectCreateMasterSerializer,
                         self).create(validated_data)
        instance.variables.create(key='repo_type', value=repo_type)
        if repo_auth_type != 'NONE':  # nocv
            key = 'repo_{}'.format(repo_auth_type.lower())
            instance.variables.create(key=key, value=repo_auth_data)
        return instance
コード例 #6
0
ファイル: serializers.py プロジェクト: teazj/polemarch
class ProjectVariableSerializer(VariableSerializer):
    project_keys = (
        ('repo_type', 'Types of repo. Default="MANUAL".'),
        ('repo_sync_on_run', "Sync project by every execution."),
        ('repo_branch', "[Only for GIT repos] Checkout branch on sync."),
        ('repo_password', "[Only for GIT repos] Password to fetch access."),
        ('repo_key', "[Only for GIT repos] Key to fetch access."),
    )
    key = serializers.ChoiceField(choices=project_keys)
    value = vst_fields.DependEnumField(allow_blank=True, field='key', choices={
        'repo_type': list(models.Project.repo_handlers.keys()),
        'repo_sync_on_run': [True, False]
    }, types={
        'repo_password': '******',
        'repo_key': 'secretfile'
    })
コード例 #7
0
ファイル: hosts.py プロジェクト: Lesiuk/vstutils
 class Meta:
     _serializer_class = 'vstutils.api.serializers.VSTSerializer'
     _list_fields = (
         'id',
         'name',
         'local_filter_applied',
         'filter_applied',
     )
     _override_list_fields = {
         'id':
         fields.RedirectIntegerField(read_only=True),
         'name':
         fields.DependEnumField(field='id', choices={
             3: 'hello',
             1: 'NOO!'
         }),
         'local_filter_applied':
         fields.IntegerField(default=0, read_only=True),
         'filter_applied':
         fields.IntegerField(default=0, read_only=True),
     }
     _filterset_fields = ('id', 'name')
     _filter_backends = (TestFilterBackend, )
コード例 #8
0
ファイル: serializers.py プロジェクト: wladtk/polemarch
class ProjectCreateMasterSerializer(vst_serializers.VSTSerializer,
                                    _WithPermissionsSerializer):
    types = models.list_to_choices(models.Project.repo_handlers.keys())
    auth_types = ['NONE', 'KEY', 'PASSWORD']
    branch_auth_types = {
        t: "hidden"
        for t in models.Project.repo_handlers.keys()
    }
    branch_auth_types['GIT'] = 'string'
    branch_types = dict(**branch_auth_types)
    branch_types['TAR'] = 'string'

    status = vst_fields.VSTCharField(read_only=True)
    type = serializers.ChoiceField(choices=types,
                                   default='MANUAL',
                                   label='Repo type')
    repository = vst_fields.VSTCharField(default='MANUAL', label='Repo url')
    repo_auth = vst_fields.DependEnumField(default='NONE',
                                           field='type',
                                           choices={"GIT": auth_types},
                                           types=branch_auth_types,
                                           label='Repo auth type',
                                           write_only=True)
    auth_data = vst_fields.DependEnumField(allow_blank=True,
                                           write_only=True,
                                           default='',
                                           field='repo_auth',
                                           label='Repo auth data',
                                           types={
                                               'KEY': 'secretfile',
                                               'PASSWORD': '******',
                                               'NONE': 'hidden'
                                           })
    branch = vst_fields.DependEnumField(
        allow_blank=True,
        required=False,
        allow_null=True,
        label='Branch for GIT(branch/tag/SHA) or TAR(subdir)',
        field='type',
        types=branch_types)

    class Meta:
        model = models.Project
        fields = (
            'id',
            'name',
            'status',
            'type',
            'repository',
            'repo_auth',
            'auth_data',
            'branch',
        )
        extra_kwargs = {'name': {'required': True}}

    def create(self, validated_data: Dict) -> models.Project:
        repo_type = validated_data.pop('type')
        repo_auth_type = validated_data.pop('repo_auth')
        repo_auth_data = validated_data.pop('auth_data')
        repo_branch = validated_data.pop('branch', None)

        instance = super(ProjectCreateMasterSerializer,
                         self).create(validated_data)
        instance.variables.create(key='repo_type', value=repo_type)
        if repo_auth_type != 'NONE':  # nocv
            key = 'repo_{}'.format(repo_auth_type.lower())
            instance.variables.create(key=key, value=repo_auth_data)
        if repo_branch:  # nocv
            instance.variables.create(key='repo_branch', value=repo_branch)
        return instance
コード例 #9
0
ファイル: serializers.py プロジェクト: wladtk/polemarch
class PeriodictaskSerializer(_WithVariablesSerializer):
    kind = serializers.ChoiceField(choices=[
        (k, k) for k in models.PeriodicTask.kinds
    ],
                                   required=False,
                                   default=models.PeriodicTask.kinds[0],
                                   label='Task type')
    type = serializers.ChoiceField(choices=[
        (k, k) for k in models.PeriodicTask.types
    ],
                                   required=False,
                                   default=models.PeriodicTask.types[0],
                                   label='Interval type')

    template_opt = vst_fields.DependEnumField(allow_blank=True,
                                              required=False,
                                              field='kind',
                                              types={
                                                  'PLAYBOOK': 'hidden',
                                                  'MODULE': 'hidden',
                                                  'TEMPLATE': 'autocomplete',
                                              })

    schedule = vst_fields.DependEnumField(allow_blank=True,
                                          field='type',
                                          types={
                                              'CRONTAB': 'crontab',
                                              'INTERVAL': 'integer',
                                          })

    mode = vst_fields.DependEnumField(allow_blank=True,
                                      required=False,
                                      field='kind',
                                      types={
                                          'PLAYBOOK': 'fk_autocomplete',
                                          'MODULE': 'fk_autocomplete',
                                          'TEMPLATE': 'hidden',
                                      })

    inventory = InventoryDependEnumField(allow_blank=True,
                                         required=False,
                                         field='kind',
                                         types={
                                             'PLAYBOOK': 'fk_autocomplete',
                                             'MODULE': 'fk_autocomplete',
                                             'TEMPLATE': 'hidden',
                                         })

    class Meta:
        model = models.PeriodicTask
        fields = (
            'id',
            'name',
            'kind',
            'mode',
            'inventory',
            'save_result',
            'template',
            'template_opt',
            'enabled',
            'type',
            'schedule',
        )

    @transaction.atomic
    def _do_with_vars(self, *args, **kwargs):
        kw = kwargs['validated_data']
        if kw.get('kind', None) == 'TEMPLATE':
            kw['inventory'] = ''
            kw['mode'] = ''
            kwargs['validated_data'] = kw
        return super(PeriodictaskSerializer,
                     self)._do_with_vars(*args, **kwargs)