Exemplo n.º 1
0
    def test_get_fields_two_queries(self):
        input = """
            query {
                projects {
                    name
                }
            }

            query {
                locales {
                    name
                }
            }
        """

        query1, query2 = parse_graphql_query(input)

        info1 = MockResolveInfo(query1)
        self.assertEqual(get_fields(info1), [
            'projects',
            'projects.name',
        ])

        info2 = MockResolveInfo(query2)
        self.assertEqual(get_fields(info2), [
            'locales',
            'locales.name',
        ])
Exemplo n.º 2
0
def test_get_fields_cyclic():
    input = """
        query {
            projects {
                name
                slug
                localizations {
                    locale {
                        localizations {
                            totalStrings
                        }
                    }
                }
            }
        }
    """

    (query, ) = parse_graphql_query(input)
    info = MockResolveInfo(query)

    assert get_fields(info) == [
        "projects",
        "projects.name",
        "projects.slug",
        "projects.localizations",
        "projects.localizations.locale",
        "projects.localizations.locale.localizations",
        "projects.localizations.locale.localizations.totalStrings",
    ]
Exemplo n.º 3
0
def test_get_fields_fragment():
    input = """
        query {
            projects {
                name
                slug
                ...stats
            }
        }

        fragment stats on Project {
            totalStrings
            missingStrings
        }
    """

    query, frag = parse_graphql_query(input)
    info = MockResolveInfo(query, {"stats": frag})

    assert get_fields(info) == [
        "projects",
        "projects.name",
        "projects.slug",
        "projects.totalStrings",
        "projects.missingStrings",
    ]
Exemplo n.º 4
0
    def test_get_fields_cyclic_in_fragment(self):
        input = """
            query {
                projects {
                    name
                    slug
                    localizations {
                        locale {
                            ...localizations
                        }
                    }
                }
            }

            fragment localizations on Locale {
                localizations {
                    totalStrings
                    missingStrings
                }
            }
        """

        query, frag = parse_graphql_query(input)
        info = MockResolveInfo(query, {'localizations': frag})

        self.assertEqual(get_fields(info), [
            'projects',
            'projects.name',
            'projects.slug',
            'projects.localizations',
            'projects.localizations.locale',
            'projects.localizations.locale.localizations',
            'projects.localizations.locale.localizations.totalStrings',
            'projects.localizations.locale.localizations.missingStrings',
        ])
Exemplo n.º 5
0
def test_get_fields_cyclic_in_fragment():
    input = """
        query {
            projects {
                name
                slug
                localizations {
                    locale {
                        ...localizations
                    }
                }
            }
        }

        fragment localizations on Locale {
            localizations {
                totalStrings
                missingStrings
            }
        }
    """

    query, frag = parse_graphql_query(input)
    info = MockResolveInfo(query, {"localizations": frag})

    assert get_fields(info) == [
        "projects",
        "projects.name",
        "projects.slug",
        "projects.localizations",
        "projects.localizations.locale",
        "projects.localizations.locale.localizations",
        "projects.localizations.locale.localizations.totalStrings",
        "projects.localizations.locale.localizations.missingStrings",
    ]
Exemplo n.º 6
0
    def resolve_projects(
            obj, info, include_disabled,
            include_system):  #obj, info, disabled여부(프로젝트 실행 중지 여부), 비활성 시스템 여부
        fields = get_fields(
            info)  #api/util.py의 get_fields 메서드: 필드명 구성 목록을 반환하는 메서드

        # ProjectModel.objects = ProjectQuerySet.as_manager()
        # ProjectModel.objects.visible_for(info.context.user) = ProjectQuerySet.visible_for(self, user) 메서드 실행
        projects = ProjectModel.objects.visible_for(info.context.user)
        records = projects.filter(disabled=False, system_project=False)

        if include_disabled:
            # |= : a|=b일 경우 a와 b의 비트를 or연산한 후 결과를 a에 할당
            records |= projects.filter(
                disabled=True)  # include_disabled가 True일 경우 records도 True

        if include_system:
            records |= projects.filter(system_project=True)

        if "projects.localizations" in fields:
            records = records.prefetch_related("project_locale__locale")

        if "projects.localizations.locale.localizations" in fields:
            raise Exception("Cyclic queries are forbidden")

        return records.distinct()
Exemplo n.º 7
0
    def test_get_fields_cyclic(self):
        input = """
            query {
                projects {
                    name
                    slug
                    localizations {
                        locale {
                            localizations {
                                totalStrings
                            }
                        }
                    }
                }
            }
        """

        query, = parse_graphql_query(input)
        info = MockResolveInfo(query)

        self.assertEqual(get_fields(info), [
            'projects',
            'projects.name',
            'projects.slug',
            'projects.localizations',
            'projects.localizations.locale',
            'projects.localizations.locale.localizations',
            'projects.localizations.locale.localizations.totalStrings',
        ])
Exemplo n.º 8
0
    def resolve_locale(obj, info, code):
        qs = LocaleModel.objects
        fields = get_fields(info)

        if 'locale.localizations' in fields:
            qs = qs.prefetch_related('project_locale__project')

        if 'locale.localizations.project.localizations' in fields:
            raise Exception('Cyclic queries are forbidden')

        return qs.get(code=code)
Exemplo n.º 9
0
    def resolve_locales(obj, args, context, info):
        qs = LocaleModel.objects
        fields = get_fields(info)

        if 'locales.localizations' in fields:
            qs = qs.prefetch_related('project_locale__project')

        if 'locales.localizations.project.localizations' in fields:
            raise Exception('Cyclic queries are forbidden')

        return qs.all()
Exemplo n.º 10
0
    def resolve_project(obj, info, slug):
        qs = ProjectModel.objects
        fields = get_fields(info)

        if 'project.localizations' in fields:
            qs = qs.prefetch_related('project_locale__locale')

        if 'project.localizations.locale.localizations' in fields:
            raise Exception('Cyclic queries are forbidden')

        return qs.get(slug=slug)
Exemplo n.º 11
0
    def resolve_locales(obj, info):
        qs = LocaleModel.objects
        fields = get_fields(info)

        if "locales.localizations" in fields:
            qs = qs.prefetch_related("project_locale__project")

        if "locales.localizations.project.localizations" in fields:
            raise Exception("Cyclic queries are forbidden")

        return qs.all()
Exemplo n.º 12
0
    def resolve_project(obj, args, context, info):
        qs = ProjectModel.objects
        fields = get_fields(info)

        if 'project.localizations' in fields:
            qs = qs.prefetch_related('project_locale__locale')

        if 'project.localizations.locale.localizations' in fields:
            raise Exception('Cyclic queries are forbidden')

        return qs.get(slug=args['slug'])
Exemplo n.º 13
0
    def resolve_locale(obj, info, code):
        qs = LocaleModel.objects
        fields = get_fields(info)

        if 'locale.localizations' in fields:
            qs = qs.prefetch_related('project_locale__project')

        if 'locale.localizations.project.localizations' in fields:
            raise Exception('Cyclic queries are forbidden')

        return qs.get(code=code)
Exemplo n.º 14
0
    def test_get_fields_one(self):
        input = """
            query {
                projects {
                    name
                }
            }
        """

        (query, ) = parse_graphql_query(input)
        info = MockResolveInfo(query)

        self.assertEqual(get_fields(info), ["projects", "projects.name"])
Exemplo n.º 15
0
def test_get_fields_two_queries():
    input = """
        query {
            projects {
                name
            }
        }

        query {
            locales {
                name
            }
        }
    """

    query1, query2 = parse_graphql_query(input)

    info1 = MockResolveInfo(query1)
    assert get_fields(info1) == ["projects", "projects.name"]

    info2 = MockResolveInfo(query2)
    assert get_fields(info2) == ["locales", "locales.name"]
Exemplo n.º 16
0
def test_get_fields_one():
    input = """
        query {
            projects {
                name
            }
        }
    """

    (query, ) = parse_graphql_query(input)
    info = MockResolveInfo(query)

    assert get_fields(info) == ["projects", "projects.name"]
Exemplo n.º 17
0
    def resolve_project(obj, info, slug):
        qs = ProjectModel.objects
        fields = get_fields(info)

        if 'project.localizations' in fields:
            qs = qs.prefetch_related('project_locale__locale')

        if 'project.tags' in fields:
            qs = qs.prefetch_related('tag_set')

        if 'project.localizations.locale.localizations' in fields:
            raise Exception('Cyclic queries are forbidden')

        return qs.get(slug=slug)
Exemplo n.º 18
0
    def resolve_projects(obj, info, include_disabled):
        qs = ProjectModel.objects
        fields = get_fields(info)

        if 'projects.localizations' in fields:
            qs = qs.prefetch_related('project_locale__locale')

        if 'projects.localizations.locale.localizations' in fields:
            raise Exception('Cyclic queries are forbidden')

        if include_disabled:
            return qs.all()

        return qs.filter(disabled=False)
Exemplo n.º 19
0
    def resolve_projects(obj, info, include_disabled):
        qs = ProjectModel.objects
        fields = get_fields(info)

        if 'projects.localizations' in fields:
            qs = qs.prefetch_related('project_locale__locale')

        if 'projects.localizations.locale.localizations' in fields:
            raise Exception('Cyclic queries are forbidden')

        if include_disabled:
            return qs.all()

        return qs.filter(disabled=False)
Exemplo n.º 20
0
    def resolve_project(obj, info, slug):
        qs = ProjectModel.objects
        fields = get_fields(info)

        if "project.localizations" in fields:
            qs = qs.prefetch_related("project_locale__locale")

        if "project.tags" in fields:
            qs = qs.prefetch_related("tag_set")

        if "project.localizations.locale.localizations" in fields:
            raise Exception("Cyclic queries are forbidden")

        return qs.get(slug=slug)
Exemplo n.º 21
0
    def test_get_fields_many(self):
        input = """
            query {
                projects {
                    name
                    slug
                }
            }
        """

        query, = parse_graphql_query(input)
        info = MockResolveInfo(query)

        self.assertEqual(get_fields(info), [
            'projects',
            'projects.name',
            'projects.slug',
        ])
Exemplo n.º 22
0
    def resolve_projects(obj, info, include_disabled, include_system):
        qs = ProjectModel.objects
        fields = get_fields(info)

        if "projects.localizations" in fields:
            qs = qs.prefetch_related("project_locale__locale")

        if "projects.localizations.locale.localizations" in fields:
            raise Exception("Cyclic queries are forbidden")

        records = qs.filter(disabled=False, system_project=False)

        if include_disabled:
            records = records | qs.filter(disabled=True)
        if include_system:
            records = records | qs.filter(system_project=True)

        return records.distinct()
Exemplo n.º 23
0
    def test_get_fields_two_fields(self):
        input = """
            query {
                projects {
                    name
                }
                locales {
                    name
                }
            }
        """

        query, = parse_graphql_query(input)
        info = MockResolveInfo(query)

        self.assertEqual(get_fields(info), [
            'projects',
            'projects.name',
            'locales',
            'locales.name',
        ])
Exemplo n.º 24
0
    def test_get_fields_cyclic_with_fragment(self):
        input = """
            query {
                projects {
                    name
                    slug
                    localizations {
                        locale {
                            localizations {
                                ...stats
                            }
                        }
                    }
                }
            }

            fragment stats on ProjectLocale {
                totalStrings
                missingStrings
            }
        """

        query, frag = parse_graphql_query(input)
        info = MockResolveInfo(query, {"stats": frag})

        self.assertEqual(
            get_fields(info),
            [
                "projects",
                "projects.name",
                "projects.slug",
                "projects.localizations",
                "projects.localizations.locale",
                "projects.localizations.locale.localizations",
                "projects.localizations.locale.localizations.totalStrings",
                "projects.localizations.locale.localizations.missingStrings",
            ],
        )
Exemplo n.º 25
0
    def test_get_fields_fragment(self):
        input = """
            query {
                projects {
                    name
                    slug
                    ...stats
                }
            }

            fragment stats on Project {
                totalStrings
                missingStrings
            }
        """

        query, frag = parse_graphql_query(input)
        info = MockResolveInfo(query, {'stats': frag})

        self.assertEqual(get_fields(info), [
            'projects', 'projects.name', 'projects.slug',
            'projects.totalStrings', 'projects.missingStrings'
        ])