Пример #1
0
    def patch(self, request, url_slug, format=None):
        try:
            organization = Organization.objects.get(url_slug=str(url_slug))
        except Organization.DoesNotExist:
            return Response(
                {'message': 'Organization not found: {}'.format(url_slug)},
                status=status.HTTP_404_NOT_FOUND)
        pass_through_params = [
            'name', 'state', 'city', 'country', 'short_description', 'school',
            'organ', 'website'
        ]
        for param in pass_through_params:
            if param in request.data:
                setattr(organization, param, request.data[param])
        if 'image' in request.data:
            organization.image = get_image_from_data_url(
                request.data['image'])[0]
        if 'background_image' in request.data:
            organization.background_image = get_image_from_data_url(
                request.data['background_image'])[0]
        if 'parent_organization' in request.data:
            if 'has_parent_organization' in request.data and request.data[
                    'has_parent_organization'] == False:
                organization.parent_organization = None
            else:
                try:
                    parent_organization = Organization.objects.get(
                        id=request.data['parent_organization'])
                except Organization.DoesNotExist:
                    return Response(
                        {
                            'message':
                            'Parent org not found for organization {}'.format(
                                url_slug)
                        },
                        status=status.HTTP_404_NOT_FOUND)
                organization.parent_organization = parent_organization
        old_organization_taggings = OrganizationTagging.objects.filter(
            organization=organization).values('organization_tag')
        if 'types' in request.data:
            for tag in old_organization_taggings:
                if not tag['organization_tag'] in request.data['types']:
                    tag_to_delete = OrganizationTags.objects.get(
                        id=tag['organization_tag'])
                    OrganizationTagging.objects.filter(
                        organization=organization,
                        organization_tag=tag_to_delete).delete()
            for tag_id in request.data['types']:
                if not old_organization_taggings.filter(
                        organization_tag=tag_id).exists():
                    try:
                        tag = OrganizationTags.objects.get(id=tag_id)
                        OrganizationTagging.objects.create(
                            organization_tag=tag, organization=organization)
                    except OrganizationTags.DoesNotExist:
                        logger.error("Passed org tag id {} does not exists")

        organization.save()
        return Response({'message': 'Successfully updated organization.'},
                        status=status.HTTP_200_OK)
Пример #2
0
    def post(self, request):
        try:
            user_profile = UserProfile.objects.get(user=self.request.user)
        except UserProfile.DoesNotExist:
            raise NotFound('User not found.')
        user = user_profile.user
        if 'first_name' in request.data:
            user.first_name = request.data['first_name']

        if 'last_name' in request.data:
            user.last_name = request.data['last_name']
        user_profile.name = user.first_name + ' ' + user.last_name
        user_profile.url_slug = (user.first_name +
                                 user.last_name).lower() + str(user.id)
        user.save()

        if 'image' in request.data:
            user_profile.image = get_image_from_data_url(
                request.data['image'])[0]

        if 'thumbnail_image' in request.data:
            user_profile.thumbnail_image = get_image_from_data_url(
                request.data['thumbnail_image'])[0]

        if 'background_image' in request.data:
            user_profile.background_image = get_image_from_data_url(
                request.data['background_image'], True, 1280)[0]

        if 'location' in request.data:
            geo_location = get_location(request.data['location'])
            user_profile.location = geo_location

        if 'biography' in request.data:
            user_profile.biography = request.data['biography']
        if 'website' in request.data:
            user_profile.website = request.data['website']

        if 'availability' in request.data:
            try:
                availability = Availability.objects.get(
                    id=int(request.data['availability']))
            except Availability.DoesNotExist:
                raise NotFound('Availability not found.')

            user_profile.availability = availability

        if 'skills' in request.data:
            for skill in user_profile.skills.all():
                if not skill.id in request.data['skills']:
                    user_profile.skills.remove(skill)
            for skill_id in request.data['skills']:
                try:
                    skill = Skill.objects.get(id=int(skill_id))
                    user_profile.skills.add(skill)
                except Skill.DoesNotExist:
                    logger.error("Passed skill id {} does not exists")
        user_profile.save()
        serializer = UserProfileSerializer(user_profile)
        return Response(serializer.data, status=status.HTTP_200_OK)
Пример #3
0
    def post(self, request):
        try:
            user_profile = UserProfile.objects.get(user=self.request.user)
        except UserProfile.DoesNotExist:
            raise NotFound('User not found.')
        user = user_profile.user
        if 'first_name' in request.data:
            user.first_name = request.data['first_name']

        if 'last_name' in request.data:
            user.last_name = request.data['last_name']
        user_profile.name = user.first_name + ' ' + user.last_name
        user_profile.url_slug = (user.first_name +
                                 user.last_name).lower() + str(user.id)
        user.save()
        logger.error("starting to save image")
        if 'image' in request.data:
            user_profile.image = get_image_from_data_url(
                request.data['image'])[0]
        logger.error("done with image")
        if 'background_image' in request.data:
            user_profile.background_image = get_image_from_data_url(
                request.data['background_image'], True, 1280)[0]
        logger.error("done with background image")
        if 'country' in request.data:
            user_profile.country = request.data['country']

        if 'state' in request.data:
            user_profile.state = request.data['state']
        if 'city' in request.data:
            user_profile.city = request.data['city']
        if 'biography' in request.data:
            user_profile.biography = request.data['biography']

        if 'availability' in request.data:
            try:
                availability = Availability.objects.get(
                    id=int(request.data['availability']))
            except Availability.DoesNotExist:
                raise NotFound('Availability not found.')

            user_profile.availability = availability

        if 'skills' in request.data:
            for skill in user_profile.skills.all():
                if not skill.id in request.data['skills']:
                    logger.error("this skill needs to be deleted: " +
                                 skill.name)
                    user_profile.skills.remove(skill)
            for skill_id in request.data['skills']:
                try:
                    skill = Skill.objects.get(id=int(skill_id))
                    user_profile.skills.add(skill)
                except Skill.DoesNotExist:
                    logger.error("Passed skill id {} does not exists")
        user_profile.save()
        serializer = UserProfileSerializer(user_profile)
        return Response(serializer.data, status=status.HTTP_200_OK)
Пример #4
0
def create_new_project(data: Dict) -> Project:
    project = Project.objects.create(
        name=data['name'],
        short_description=data['short_description'],
        collaborators_welcome=data['collaborators_welcome'],
        status_id=data['status'])
    # Add all non required parameters if they exists in the request.
    if 'start_date' in data:
        project.start_date = data['start_date']
    if 'loc' in data:
        location = get_location(data['loc'])
        project.loc = location
    if 'country' in data:
        project.country = data['country']
    if 'city' in data:
        project.city = data['city']
    if 'image' in data:
        project.image = get_image_from_data_url(data['image'])[0]
    if 'thumbnail_image' in data:
        project.thumbnail_image = get_image_from_data_url(
            data['thumbnail_image'])[0]
    if 'description' in data:
        project.description = data['description']
    if 'end_date' in data:
        project.end_date = data['end_date']
    if 'helpful_connections' in data:
        project.helpful_connections = data['helpful_connections']
    if 'is_draft' in data:
        project.is_draft = data['is_draft']
    if 'website' in data:
        project.website = data['website']

    project.url_slug = project.name.replace(" ", "") + str(project.id)

    if 'skills' in data:
        for skill_id in data['skills']:
            try:
                skill = Skill.objects.get(id=int(skill_id))
                project.skills.add(skill)
            except Skill.DoesNotExist:
                logger.error(
                    "Passed skill ID {} does not exists".format(skill_id))
                continue

    project.save()
    return project
Пример #5
0
def add_additional_create_idea_params(idea: Idea, data: dict,
                                      url_slug: str) -> None:
    idea.url_slug = url_slug
    try:
        hub = Hub.objects.get(url_slug=data['hub'])
        hub_shared_in = Hub.objects.get(url_slug=data['hub_shared_in'])
    except Hub.DoesNotExist:
        idea.delete()
        raise ValidationError('Hub does not exist: ' + data['hub'])
    idea.hub = hub
    idea.hub_shared_in = hub_shared_in
    if 'location' in data:
        idea.location = get_location(data['location'])

    if 'image' in data and 'thumbnail_image' in data:
        idea.image = get_image_from_data_url(data['image'])[0]
        idea.thumbnail_image = get_image_from_data_url(
            data['thumbnail_image'])[0]
    if 'parent_organization' in data:
        try:
            organization = Organization.objects.get(
                id=data['parent_organization'])
        except Organization.DoesNotExist:
            idea.delete()
            raise ValidationError('Organization does not exist!')
        idea.organization = organization

    try:
        idea.save()
    except IntegrityError:
        if url_slug.endswith(str(idea.id)):
            # It seems like we alread called this function and added the id to the url slug, but there is still an integrity error!
            # Seems like it is unrelated to the url_slug and there is some bigger problem
            idea.delete()
            raise ValidationError("Internal Server Error")
        else:
            # The url slug is already taken! We'll append the project id in the end to make it unique again
            add_additional_create_idea_params(idea, data,
                                              url_slug + str(idea.id))
Пример #6
0
    def patch(self, request, url_slug, format=None):
        try:
            project = Project.objects.get(url_slug=url_slug)
        except Project.DoesNotExist:
            return Response({'message': 'Project not found: {}'.format(url_slug)}, status=status.HTTP_404_NOT_FOUND)
        
        # Author: Dip
        # Code formatting here. So fields are just pass through so combing them and using setattr method insted.
        pass_through_params = ['collaborators_welcome', 'description', 'helpful_connections','short_description', 'website']
        for param in pass_through_params:
            if param in request.data:
                setattr(project, param, request.data[param])

        if 'name' in request.data and request.data['name'] != project.name:
            project.name = request.data['name']
            project.url_slug = request.data['name'] + str(project.id)

        if 'skills' in request.data:
            for skill in project.skills.all():
                if not skill.id in request.data['skills']:
                    logger.error("this skill needs to be deleted: "+skill.name)
                    project.skills.remove(skill)
            for skill_id in request.data['skills']:
                try:
                    skill = Skill.objects.get(id=skill_id)
                    project.skills.add(skill)
                except Skill.DoesNotExist:
                    logger.error("Passed skill id {} does not exists")

        old_project_taggings = ProjectTagging.objects.filter(project=project)
        old_project_tags = old_project_taggings.values('project_tag')
        if 'project_tags' in request.data:
            order = len(request.data['project_tags'])
            for tag in old_project_tags:
                if not tag['project_tag'] in request.data['project_tags']:
                    tag_to_delete = ProjectTags.objects.get(id=tag['project_tag'])
                    ProjectTagging.objects.filter(project=project, project_tag=tag_to_delete).delete()
            for tag_id in request.data['project_tags']:
                old_taggings = old_project_taggings.filter(project_tag=tag_id)
                if not old_taggings.exists():
                    try:
                        tag = ProjectTags.objects.get(id=tag_id)
                        ProjectTagging.objects.create(
                            project_tag=tag, project=project, order = order
                        )
                    except ProjectTags.DoesNotExist:
                        logger.error("Passed proj tag id {} does not exists")
                else:
                    old_tagging = old_taggings[0]
                    if not old_tagging.order == order:
                        old_tagging.order = int(order)
                        old_tagging.save()
                order = order - 1
        if 'image' in request.data:
            project.image = get_image_from_data_url(request.data['image'])[0]
        if 'thumbnail_image' in request.data:
            project.thumbnail_image = get_image_from_data_url(request.data['thumbnail_image'])[0]
        if 'status' in request.data:
            try:
                project_status = ProjectStatus.objects.get(id=int(request.data['status']))
            except ProjectStatus.DoesNotExist:
                raise NotFound('Project status not found.')
            project.status = project_status
        if 'start_date' in request.data:
            project.start_date = parse(request.data['start_date'])
        if 'end_date' in request.data:
            project.end_date = parse(request.data['end_date'])
        if 'location' in request.data:
            project.location = request.data['location']
        if 'loc' in request.data:
            location = get_location(request.data['loc'])
            project.loc = location
        if 'is_draft' in request.data:
            project.is_draft = False
        if 'is_personal_project' in request.data:
            if request.data['is_personal_project'] == True:
                project_parents = ProjectParents.objects.get(project=project)
                project_parents.parent_organization = None
                project_parents.save()
        if 'parent_organization' in request.data:
            project_parents = ProjectParents.objects.get(project=project)
            try:
                organization = Organization.objects.get(id=request.data['parent_organization'])
            except Organization.DoesNotExist:
                organization = None
                logger.error("Passed parent organization id {} does not exist")
            
            project_parents.parent_organization = organization
            project_parents.save()

        project.save()

        return Response({
            'message': 'Project {} successfully updated'.format(project.name),
            'url_slug': project.url_slug
        }, status=status.HTTP_200_OK)
    def post(self, request):
        required_params = [
            'name', 'team_members', 'location', 'image', 'organization_tags'
        ]
        for param in required_params:
            if param not in request.data:
                return Response(
                    {
                        'message':
                        'Required parameter missing: {}'.format(param)
                    },
                    status=status.HTTP_400_BAD_REQUEST)

        organization, created = Organization.objects.get_or_create(
            name=request.data['name'])

        if created:
            organization.url_slug = organization.name.replace(" ", "") + str(
                organization.id)

            if 'image' in request.data:
                organization.image = get_image_from_data_url(
                    request.data['image'])[0]
            if 'thumbnail_image' in request.data:
                organization.thumbnail_image = get_image_from_data_url(
                    request.data['thumbnail_image'])[0]
            if 'background_image' in request.data:
                organization.background_image = get_image_from_data_url(
                    request.data['background_image'])[0]

            if 'parent_organization' in request.data:
                try:
                    parent_org = Organization.objects.get(
                        id=int(request.data['parent_organization']))
                except Organization.DoesNotExist:
                    return Response(
                        {'message': 'Parent organization not found.'},
                        status=status.HTTP_404_NOT_FOUND)

                organization.parent_organization = parent_org

            # Get accurate location from google maps.
            if 'location' in request.data:
                organization.location = get_location(request.data['location'])
            if 'short_description' in request.data:
                organization.short_description = request.data[
                    'short_description']
            if 'website' in request.data:
                organization.website = request.data['website']
            organization.save()
            roles = Role.objects.all()
            for member in request.data['team_members']:
                user_role = roles.filter(
                    id=int(member['permission_type_id'])).first()
                try:
                    user = User.objects.get(id=int(member['user_id']))
                except User.DoesNotExist:
                    logger.error("Passed user id {} does not exists".format(
                        member['user_id']))
                    continue

                if user:
                    OrganizationMember.objects.create(
                        user=user, organization=organization, role=user_role)
                    logger.info("Organization member created {}".format(
                        user.id))

            if 'organization_tags' in request.data:
                for organization_tag_id in request.data['organization_tags']:
                    try:
                        organization_tag = OrganizationTags.objects.get(
                            id=int(organization_tag_id))
                    except OrganizationTags.DoesNotExist:
                        logger.error(
                            "Passed organization tag ID {} does not exists".
                            format(organization_tag_id))
                        continue
                    if organization_tag:
                        OrganizationTagging.objects.create(
                            organization=organization,
                            organization_tag=organization_tag)
                        logger.info(
                            "Organization tagging created for organization {}".
                            format(organization.id))

            return Response(
                {
                    'message':
                    'Organization {} successfully created'.format(
                        organization.name),
                    'url_slug':
                    organization.url_slug
                },
                status=status.HTTP_201_CREATED)
        else:
            return Response(
                {
                    'message':
                    'Organization with name {} already exists'.format(
                        request.data['name'])
                },
                status=status.HTTP_400_BAD_REQUEST)
Пример #8
0
    def patch(self, request, url_slug, format=None):
        try:
            organization = Organization.objects.get(url_slug=str(url_slug))
        except Organization.DoesNotExist:
            return Response(
                {'message': _('Organization not found:') + url_slug},
                status=status.HTTP_404_NOT_FOUND)
        pass_through_params = [
            'name', 'short_description', 'about', 'school', 'organ', 'website',
            'organization_size'
        ]
        for param in pass_through_params:
            if param in request.data:
                setattr(organization, param, request.data[param])
        if 'location' in request.data:
            organization.location = get_location(request.data['location'])
        if 'language' in request.data:
            language = Language.objects.filter(
                language_code=request.data['language'])
            if language.exists():
                organization.language = language[0]
        if 'image' in request.data:
            organization.image = get_image_from_data_url(
                request.data['image'])[0]
        if 'thumbnail_image' in request.data:
            organization.thumbnail_image = get_image_from_data_url(
                request.data['thumbnail_image'])[0]
        if 'background_image' in request.data:
            organization.background_image = get_image_from_data_url(
                request.data['background_image'])[0]
        if 'hubs' in request.data:
            for hub in organization.hubs.all():
                if not hub.url_slug in request.data['hubs']:
                    organization.hubs.remove(hub)
            for hub_url_slug in request.data['hubs']:
                try:
                    hub = Hub.objects.get(url_slug=hub_url_slug)
                    organization.hubs.add(hub)
                except Hub.DoesNotExist:
                    logger.error("Passed hub url_slug {} does not exists")
        if 'parent_organization' in request.data:
            if 'has_parent_organization' in request.data \
                and request.data['has_parent_organization'] == False:
                organization.parent_organization = None
            else:
                try:
                    parent_organization = Organization.objects.get(
                        id=request.data['parent_organization'])
                except Organization.DoesNotExist:
                    return Response(
                        {
                            'message':
                            _('Parent organization not found for organization')
                            + url_slug
                        },
                        status=status.HTTP_404_NOT_FOUND)
                organization.parent_organization = parent_organization

        items_to_translate = [{
            'key': 'name',
            'translation_key': 'name_translation'
        }, {
            'key':
            'short_description',
            'translation_key':
            'short_description_translation'
        }, {
            'key': 'about',
            'translation_key': 'about_translation'
        }, {
            'key': 'school',
            'translation_key': 'school_translation'
        }, {
            'key': 'organ',
            'translation_key': 'organ_translation'
        }]

        edit_translations(items_to_translate, request.data, organization,
                          "organization")

        old_organization_taggings = OrganizationTagging.objects.filter(
            organization=organization).values('organization_tag')
        if 'types' in request.data:
            for tag in old_organization_taggings:
                if not tag['organization_tag'] in request.data['types']:
                    tag_to_delete = OrganizationTags.objects.get(
                        id=tag['organization_tag'])
                    OrganizationTagging.objects.filter(
                        organization=organization,
                        organization_tag=tag_to_delete).delete()
            for tag_id in request.data['types']:
                if not old_organization_taggings.filter(
                        organization_tag=tag_id).exists():
                    try:
                        tag = OrganizationTags.objects.get(id=tag_id)
                        OrganizationTagging.objects.create(
                            organization_tag=tag, organization=organization)
                    except OrganizationTags.DoesNotExist:
                        logger.error(
                            _("Passed organization tag id does not exists: ") +
                            tag_id)

        organization.save()
        return Response({'message': _('Successfully updated organization.')},
                        status=status.HTTP_200_OK)
Пример #9
0
    def post(self, request):
        required_params = [
            'name', 'team_members', 'location', 'image', 'organization_tags',
            'translations', 'source_language', 'short_description'
        ]
        for param in required_params:
            if param not in request.data:
                return Response(
                    {
                        'message':
                        'Required parameter missing: {}'.format(param)
                    },
                    status=status.HTTP_400_BAD_REQUEST)

        texts = {"name": request.data['name']}
        if 'short_description' in request.data:
            texts['short_description'] = request.data['short_description']
        if 'about' in request.data:
            texts['about'] = request.data['about']

        try:
            translations = get_translations(texts,
                                            request.data['translations'],
                                            request.data['source_language'],
                                            ["name"])
        except ValueError as ve:
            translations = None
            logger.error(
                "TranslationFailed: Error translating texts, {}".format(ve))
        organization, created = Organization.objects.get_or_create(
            name=request.data['name'])

        if created:
            organization.url_slug = organization.name.replace(" ", "") + str(
                organization.id)
            # Add primary language to organization table.
            source_language = Language.objects.get(
                language_code=request.data['source_language'])
            organization.language = source_language

            if 'image' in request.data:
                organization.image = get_image_from_data_url(
                    request.data['image'])[0]
            if 'thumbnail_image' in request.data:
                organization.thumbnail_image = get_image_from_data_url(
                    request.data['thumbnail_image'])[0]
            if 'background_image' in request.data:
                organization.background_image = get_image_from_data_url(
                    request.data['background_image'])[0]

            if 'parent_organization' in request.data:
                try:
                    parent_org = Organization.objects.get(
                        id=int(request.data['parent_organization']))
                except Organization.DoesNotExist:
                    return Response(
                        {'message': 'Parent organization not found.'},
                        status=status.HTTP_404_NOT_FOUND)

                organization.parent_organization = parent_org

            # Get accurate location from google maps.
            if 'location' in request.data:
                organization.location = get_location(request.data['location'])
            if 'short_description' in request.data:
                organization.short_description = request.data[
                    'short_description']
            if 'about' in request.data:
                organization.about = request.data['about']
            if 'website' in request.data:
                organization.website = request.data['website']
            if 'organization_size' in request.data and is_valid_organization_size(
                    request.data['organization_size']):
                organization.organization_size = request.data[
                    'organization_size']
            if 'hubs' in request.data:
                hubs = []
                for hub_url_slug in request.data['hubs']:
                    try:
                        hub = Hub.objects.get(url_slug=hub_url_slug)
                        hubs.append(hub)
                    except Hub.DoesNotExist:
                        logger.error("Passed hub url_slug {} does not exists")
                organization.hubs.set(hubs)
            organization.save()
            # Create organization translation
            if translations:
                for key in translations['translations']:
                    if not key == "is_manual_translation":
                        language_code = key
                        texts = translations['translations'][language_code]
                        language = Language.objects.get(
                            language_code=language_code)
                        if language_code in request.data['translations']:
                            is_manual_translation = request.data[
                                'translations'][language_code][
                                    'is_manual_translation']
                        else:
                            is_manual_translation = False
                        create_organization_translation(
                            organization, language, texts,
                            is_manual_translation)
            roles = Role.objects.all()
            for member in request.data['team_members']:
                user_role = roles.filter(
                    id=int(member['permission_type_id'])).first()
                try:
                    user = User.objects.get(id=int(member['user_id']))
                except User.DoesNotExist:
                    logger.error("Passed user id {} does not exists".format(
                        member['user_id']))
                    continue

                if user:
                    OrganizationMember.objects.create(
                        user=user, organization=organization, role=user_role)
                    logger.info("Organization member created {}".format(
                        user.id))

            if 'organization_tags' in request.data:
                for organization_tag_id in request.data['organization_tags']:
                    try:
                        organization_tag = OrganizationTags.objects.get(
                            id=int(organization_tag_id))
                    except OrganizationTags.DoesNotExist:
                        logger.error(
                            "Passed organization tag ID {} does not exists".
                            format(organization_tag_id))
                        continue
                    if organization_tag:
                        OrganizationTagging.objects.create(
                            organization=organization,
                            organization_tag=organization_tag)
                        logger.info(
                            "Organization tagging created for organization {}".
                            format(organization.id))

            return Response(
                {
                    'message':
                    'Organization {} successfully created'.format(
                        organization.name),
                    'url_slug':
                    organization.url_slug
                },
                status=status.HTTP_201_CREATED)
        else:
            return Response(
                {
                    'message':
                    'Organization with name {} already exists'.format(
                        request.data['name'])
                },
                status=status.HTTP_400_BAD_REQUEST)
Пример #10
0
    def patch(self, request, url_slug, format=None):
        try:
            project = Project.objects.get(url_slug=url_slug)
        except Project.DoesNotExist:
            return Response(
                {'message': 'Project not found: {}'.format(url_slug)},
                status=status.HTTP_404_NOT_FOUND)

        if 'name' in request.data and request.data['name'] != project.name:
            project.name = request.data['name']
            project.url_slug = request.data['name'] + str(project.id)

        if 'skills' in request.data:
            for skill in project.skills.all():
                if not skill.id in request.data['skills']:
                    logger.error("this skill needs to be deleted: " +
                                 skill.name)
                    project.skills.remove(skill)
            for skill_id in request.data['skills']:
                try:
                    skill = Skill.objects.get(id=skill_id)
                    project.skills.add(skill)
                except Skill.DoesNotExist:
                    logger.error("Passed skill id {} does not exists")

        old_project_taggings = ProjectTagging.objects.filter(
            project=project).values('project_tag')
        if 'project_tags' in request.data:
            for tag in old_project_taggings:
                if not tag['project_tag'] in request.data['project_tags']:
                    logger.error("this tag needs to be deleted: " +
                                 str(tag['project_tag']))
                    tag_to_delete = ProjectTags.objects.get(
                        id=tag['project_tag'])
                    ProjectTagging.objects.filter(
                        project=project, project_tag=tag_to_delete).delete()
            for tag_id in request.data['project_tags']:
                if not old_project_taggings.filter(
                        project_tag=tag_id).exists():
                    try:
                        tag = ProjectTags.objects.get(id=tag_id)
                        ProjectTagging.objects.create(project_tag=tag,
                                                      project=project)
                    except ProjectTags.DoesNotExist:
                        logger.error("Passed tag id {} does not exists")

        if 'image' in request.data:
            project.image = get_image_from_data_url(request.data['image'])[0]
        if 'status' in request.data:
            try:
                project_status = ProjectStatus.objects.get(
                    id=int(request.data['status']))
            except ProjectStatus.DoesNotExist:
                raise NotFound('Project status not found.')
            project.status = project_status
        if 'start_date' in request.data:
            project.start_date = parse(request.data['start_date'])
        if 'end_date' in request.data:
            project.end_date = parse(request.data['end_date'])
        if 'short_description' in request.data:
            project.short_description = request.data['short_description']
        if 'description' in request.data:
            project.description = request.data['description']
        if 'country' in request.data:
            project.country = request.data['country']
        if 'city' in request.data:
            project.city = request.data['city']
        if 'is_draft' in request.data:
            project.is_draft = False
        if 'collaborators_welcome' in request.data:
            project.collaborators_welcome = request.data[
                'collaborators_welcome']
        if 'helpful_connections' in request.data:
            project.helpful_connections = request.data['helpful_connections']
        if 'is_personal_project' in request.data:
            if request.data['is_personal_project'] == True:
                project_parents = ProjectParents.objects.get(project=project)
                project_parents.parent_organization = None
                project_parents.save()
        if 'parent_organization' in request.data:
            project_parents = ProjectParents.objects.get(project=project)
            try:
                organization = Organization.objects.get(
                    id=request.data['parent_organization'])
            except Organization.DoesNotExist:
                logger.error("Passed parent organization id {} does not exist")
            project_parents.parent_organization = organization
            project_parents.save()

        project.save()

        return Response(
            {
                'message': 'Project {} successfully updated'.format(
                    project.name),
                'url_slug': project.url_slug
            },
            status=status.HTTP_200_OK)
Пример #11
0
    def patch(self, request, url_slug, format=None):
        idea = verify_idea(url_slug)
        if not idea:
            return Response({'message': 'Idea not found'},
                            status=status.HTTP_404_NOT_FOUND)

        if 'name' in request.data and idea.name != request.data['name']:
            idea.name = request.data['name']

        if 'short_description' in request.data and\
            idea.short_description != request.data['short_description']:
            idea.short_description = request.data['short_description']

        if 'image' in request.data and request.data['image'] is not None:
            image = get_image_from_data_url(request.data['image'])[0]
            idea.image = image

        if 'thumbnail_image' in request.data and request.data[
                'thumbnail_image']:
            thumbnail_image = get_image_from_data_url(
                request.data['thumbnail_image'])[0]
            idea.thumbnail_image = thumbnail_image

        if 'location' in request.data and request.data['location']:
            idea.location = get_location(request.data['location'])

        if 'hub' in request.data:
            try:
                hub = Hub.objects.get(url_slug=request.data['hub'])
            except Hub.DoesNotExist:
                hub = None

            if hub:
                idea.hub = hub

        if 'parent_organization' in request.data:
            try:
                organization = Organization.objects.get(
                    id=request.data['parent_organization'])
            except Organization.DoesNotExist:
                organization = None

            if organization:
                idea.organization = organization

        idea.save()

        # TODO (Dip 8-6-2021): Transfer this logic to celery task.
        texts = {
            "name": idea.name,
            "short_description": idea.short_description
        }
        try:
            translations = get_translations(texts, {},
                                            idea.language.language_code)
        except ValueError as ve:
            translations = None
            logger.error(
                "TranslationFailed: Error translating texts, {}".format(ve))

        if translations:
            idea_translations(idea=idea,
                              translations=translations['translations'],
                              source_language=idea.language)

        serializer = IdeaSerializer(idea)
        return Response(serializer.data, status=status.HTTP_200_OK)