def create(self, request, *args, **kwargs): # pylint: disable=unused-argument ''' 添加子部门,从无到有 [POST] ''' parent_dept = self.get_object() dept_data = json.loads(request.body.decode('utf-8')) uid = dept_data.get('uid', '') if not uid: name = dept_data.get('name') uid = gen_uid(name=name, cls=Dept) dept_data['uid'] = uid dept_data.update(parent_uid=self.kwargs['uid']) cli = CLI() child_dept = cli.create_dept(dept_data) cli.add_dept_to_dept(child_dept, parent_dept) return Response(DeptDetailSerializer(child_dept).data, status=status.HTTP_201_CREATED)
def update(self, instance, validated_data): # pylint: disable=too-many-locals, too-many-statements, too-many-branches company_config_data = validated_data.pop('company_config', None) if company_config_data: if not Dept.valid_objects.filter(parent__uid='root').exists(): uid = gen_uid(name=company_config_data.get('name_cn', ''), cls=Dept) parent_dept = Dept.valid_objects.filter(uid='root').first() cli = CLI() dept_data = { 'parent_uid': 'root', 'name': company_config_data.get('name_cn', ''), 'uid': uid, } child_dept = cli.create_dept(dept_data) cli.add_dept_to_dept(child_dept, parent_dept) else: company_dept = Dept.valid_objects.filter( parent__uid='root').first() company_dept.name = company_config_data.get('name_cn', '') company_dept.save() serializer = CompanyConfigSerializer(CompanyConfig.get_current(), company_config_data) serializer.is_valid(raise_exception=True) serializer.save() account_config_data = validated_data.pop('account_config', None) if account_config_data: serializer = AccountConfigSerializer(AccountConfig.get_current(), account_config_data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() ding_config_data = validated_data.pop('ding_config', None) if ding_config_data: serializer = DingConfigSerializer(DingConfig.get_current(), ding_config_data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() sms_config_data = validated_data.pop('sms_config', None) if sms_config_data: access_secret = sms_config_data.pop('access_secret', '') config = SMSConfig.get_current() serializer = SMSConfigSerializer(config, sms_config_data, partial=True) serializer.is_valid(raise_exception=True) # pylint: disable=not-callable config.__dict__.update(serializer.validated_data) if access_secret: config.access_secret = access_secret if not config.check_valid(): raise ValidationError({'sms': ['invalid']}) config.is_valid = True config.save() email_config_data = validated_data.pop('email_config', None) if email_config_data: access_secret = email_config_data.pop('access_secret', '') config = EmailConfig.get_current() serializer = EmailConfigSerializer(config, email_config_data, partial=True) serializer.is_valid(raise_exception=True) # pylint: disable=not-callable config.__dict__.update(serializer.validated_data) if access_secret: config.access_secret = access_secret if not config.check_valid(): raise ValidationError({'email': ['invalid']}) config.is_valid = True config.save() alipay_config_data = validated_data.pop('alipay_config', None) if alipay_config_data: if alipay_config_data["app_id"] != '': serializer = AlipayConfigSerializer(AlipayConfig.get_current(), alipay_config_data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() qq_config_data = validated_data.pop('qq_config', None) if qq_config_data: serializer = QQConfigSerializer(QQConfig.get_current(), qq_config_data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() work_wechat_config_data = validated_data.pop('work_wechat_config', None) if work_wechat_config_data: serializer = WorkWechatConfigSerializer(WorkWechatConfig.get_current(),\ work_wechat_config_data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() wechat_config_data = validated_data.pop('wechat_config', None) if wechat_config_data: serializer = WechatConfigSerializer(WechatConfig.get_current(),\ wechat_config_data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() password_config_data = validated_data.pop('password_config', None) if password_config_data: config = PasswordComplexityConfig.get_current() serializer = PasswordConfigSerializer(config, password_config_data, partial=True) serializer.is_valid(raise_exception=True) # pylint: disable=not-callable config.__dict__.update(serializer.validated_data) config.save() github_config = validated_data.pop('github_config', None) if github_config: config = GithubConfig.get_current() serializer = GithubConfigSerializer(config, github_config, partial=True) serializer.is_valid(raise_exception=True) serializer.save() instance.refresh_from_db() return instance
def update(self, instance, validated_data): company_config_data = validated_data.pop('company_config', None) if company_config_data: if not Dept.valid_objects.filter(parent__uid='root').exists(): uid = gen_uid(name=company_config_data.get('name_cn', ''), cls=Dept) parent_dept = Dept.valid_objects.filter(uid='root').first() cli = CLI() dept_data = { 'parent_uid': 'root', 'name': company_config_data.get('name_cn', ''), 'uid': uid, } child_dept = cli.create_dept(dept_data) cli.add_dept_to_dept(child_dept, parent_dept) else: company_dept = Dept.valid_objects.filter(parent__uid='root').first() company_dept.name = company_config_data.get('name_cn', '') company_dept.save() serializer = CompanyConfigSerializer(CompanyConfig.get_current(), company_config_data) serializer.is_valid(raise_exception=True) serializer.save() ding_config_data = validated_data.pop('ding_config', None) if ding_config_data: serializer = DingConfigSerializer(DingConfig.get_current(), ding_config_data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() account_config_data = validated_data.pop('account_config', None) if account_config_data: serializer = AccountConfigSerializer(AccountConfig.get_current(), account_config_data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() sms_config_data = validated_data.pop('sms_config', None) if sms_config_data: access_secret = sms_config_data.pop('access_secret', '') config = SMSConfig.get_current() serializer = SMSConfigSerializer(config, sms_config_data, partial=True) serializer.is_valid(raise_exception=True) # pylint: disable=not-callable config.__dict__.update(serializer.validated_data) if access_secret: config.access_secret = access_secret if not config.check_valid(): raise ValidationError({'sms': ['invalid']}) config.is_valid = True config.save() email_config_data = validated_data.pop('email_config', None) if email_config_data: access_secret = email_config_data.pop('access_secret', '') config = EmailConfig.get_current() serializer = EmailConfigSerializer(config, email_config_data, partial=True) serializer.is_valid(raise_exception=True) # pylint: disable=not-callable config.__dict__.update(serializer.validated_data) if access_secret: config.access_secret = access_secret if not config.check_valid(): raise ValidationError({'email': ['invalid']}) config.is_valid = True config.save() instance.refresh_from_db() return instance