8a263f1
From f96278906447fe2b3aa15d6fb0a0dc28e6dddf83 Mon Sep 17 00:00:00 2001
8a263f1
From: Clement Verna <cverna@tutanota.com>
8a263f1
Date: Wed, 18 Nov 2020 21:08:24 +0100
8a263f1
Subject: [PATCH] Remove Graphql for packaging
8a263f1
8a263f1
Signed-off-by: Clement Verna <cverna@tutanota.com>
8a263f1
8a263f1
diff --git a/bodhi/server/graphql_schemas.py b/bodhi/server/graphql_schemas.py
8a263f1
deleted file mode 100644
8a263f1
index 2acf57f7..00000000
8a263f1
--- a/bodhi/server/graphql_schemas.py
8a263f1
+++ /dev/null
8a263f1
@@ -1,62 +0,0 @@
8a263f1
-# Copyright © 2020 Red Hat Inc., and others.
8a263f1
-#
8a263f1
-# This file is part of Bodhi.
8a263f1
-#
8a263f1
-# This program is free software; you can redistribute it and/or
8a263f1
-# modify it under the terms of the GNU General Public License
8a263f1
-# as published by the Free Software Foundation; either version 2
8a263f1
-# of the License, or (at your option) any later version.
8a263f1
-#
8a263f1
-# This program is distributed in the hope that it will be useful,
8a263f1
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
8a263f1
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
8a263f1
-# GNU General Public License for more details.
8a263f1
-#
8a263f1
-# You should have received a copy of the GNU General Public License
8a263f1
-# along with this program; if not, write to the Free Software
8a263f1
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
8a263f1
-"""Defines schemas related to GraphQL objects."""
8a263f1
-from graphene import relay, Field, String
8a263f1
-from graphene_sqlalchemy import SQLAlchemyObjectType
8a263f1
-
8a263f1
-from bodhi.server.models import (
8a263f1
-    Release as ReleaseModel,
8a263f1
-    Update as UpdateModel,
8a263f1
-    BuildrootOverride as BuildrootOverrideModel
8a263f1
-)
8a263f1
-
8a263f1
-
8a263f1
-class Release(SQLAlchemyObjectType):
8a263f1
-    """Type object representing a distribution release from bodhi.server.models like Fedora 27."""
8a263f1
-
8a263f1
-    class Meta:
8a263f1
-        """Allow to set different options to the class."""
8a263f1
-
8a263f1
-        model = ReleaseModel
8a263f1
-        interfaces = (relay.Node, )
8a263f1
-    state = Field(String)
8a263f1
-    package_manager = Field(String)
8a263f1
-
8a263f1
-
8a263f1
-class Update(SQLAlchemyObjectType):
8a263f1
-    """Type object representing an update from bodhi.server.models."""
8a263f1
-
8a263f1
-    class Meta:
8a263f1
-        """Allow to set different options to the class."""
8a263f1
-
8a263f1
-        model = UpdateModel
8a263f1
-        interfaces = (relay.Node, )
8a263f1
-    status = Field(String)
8a263f1
-    request = Field(String)
8a263f1
-    date_approved = Field(String)
8a263f1
-
8a263f1
-
8a263f1
-class BuildrootOverride(SQLAlchemyObjectType):
8a263f1
-    """Type object representing an update from bodhi.server.models."""
8a263f1
-
8a263f1
-    class Meta:
8a263f1
-        """Allow to set different options to the class."""
8a263f1
-
8a263f1
-        model = BuildrootOverrideModel
8a263f1
-        interfaces = (relay.Node, )
8a263f1
-    submitter = Field(String)
8a263f1
diff --git a/bodhi/server/services/graphql.py b/bodhi/server/services/graphql.py
8a263f1
deleted file mode 100644
8a263f1
index 1d68f320..00000000
8a263f1
--- a/bodhi/server/services/graphql.py
8a263f1
+++ /dev/null
8a263f1
@@ -1,179 +0,0 @@
8a263f1
-# Copyright © 2020 Red Hat Inc., and others.
8a263f1
-#
8a263f1
-# This file is part of Bodhi.
8a263f1
-#
8a263f1
-# This program is free software; you can redistribute it and/or
8a263f1
-# modify it under the terms of the GNU General Public License
8a263f1
-# as published by the Free Software Foundation; either version 2
8a263f1
-# of the License, or (at your option) any later version.
8a263f1
-#
8a263f1
-# This program is distributed in the hope that it will be useful,
8a263f1
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
8a263f1
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
8a263f1
-# GNU General Public License for more details.
8a263f1
-#
8a263f1
-# You should have received a copy of the GNU General Public License
8a263f1
-# along with this program; if not, write to the Free Software
8a263f1
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
8a263f1
-"""Defines API endpoints related to GraphQL objects."""
8a263f1
-import graphene
8a263f1
-from cornice import Service
8a263f1
-from webob_graphql import serve_graphql_request
8a263f1
-
8a263f1
-from bodhi.server.config import config
8a263f1
-from bodhi.server.models import Build as BuildModel, User as UserModel
8a263f1
-from bodhi.server.graphql_schemas import (
8a263f1
-    Release,
8a263f1
-    ReleaseModel,
8a263f1
-    Update,
8a263f1
-    UpdateModel,
8a263f1
-    BuildrootOverride,
8a263f1
-    BuildrootOverrideModel
8a263f1
-)
8a263f1
-
8a263f1
-graphql = Service(name='graphql', path='/graphql', description='graphql service')
8a263f1
-
8a263f1
-
8a263f1
-@graphql.get()
8a263f1
-@graphql.post()
8a263f1
-def graphql_get(request):
8a263f1
-    """
8a263f1
-    Perform a GET request.
8a263f1
-
8a263f1
-    Args:
8a263f1
-        request (pyramid.Request): The current request.
8a263f1
-    Returns:
8a263f1
-        The GraphQL response to the request.
8a263f1
-    """
8a263f1
-    context = {'session': request.session}
8a263f1
-    return serve_graphql_request(
8a263f1
-        request, schema, graphiql_enabled=config.get('graphiql_enabled'),
8a263f1
-        context_value=context)
8a263f1
-
8a263f1
-
8a263f1
-class Query(graphene.ObjectType):
8a263f1
-    """Allow querying objects."""
8a263f1
-
8a263f1
-    allReleases = graphene.List(Release)
8a263f1
-    getReleases = graphene.Field(
8a263f1
-        lambda: graphene.List(Release), name=graphene.String(),
8a263f1
-        id_prefix=graphene.String(), composed_by_bodhi=graphene.Boolean(),
8a263f1
-        state=graphene.String())
8a263f1
-
8a263f1
-    getUpdates = graphene.Field(
8a263f1
-        lambda: graphene.List(Update), stable_karma=graphene.Int(),
8a263f1
-        stable_days=graphene.Int(), unstable_karma=graphene.Int(),
8a263f1
-        status=graphene.String(), request=graphene.String(),
8a263f1
-        pushed=graphene.Boolean(), critpath=graphene.Boolean(),
8a263f1
-        date_approved=graphene.String(), alias=graphene.String(),
8a263f1
-        user_id=graphene.Int(), release_name=graphene.String())
8a263f1
-
8a263f1
-    getBuildrootOverrides = graphene.Field(
8a263f1
-        lambda: graphene.List(BuildrootOverride),
8a263f1
-        submission_date=graphene.DateTime(),
8a263f1
-        expiration_date=graphene.DateTime(),
8a263f1
-        build_nvr=graphene.String(),
8a263f1
-        submitter_username=graphene.String())
8a263f1
-
8a263f1
-    def resolve_allReleases(self, info):
8a263f1
-        """Answer Queries by fetching data from the Schema."""
8a263f1
-        query = Release.get_query(info)  # SQLAlchemy query
8a263f1
-        return query.all()
8a263f1
-
8a263f1
-    def resolve_getReleases(self, info, **args):
8a263f1
-        """Answer Release queries with a given argument."""
8a263f1
-        query = Release.get_query(info)
8a263f1
-
8a263f1
-        id_prefix = args.get("id_prefix")
8a263f1
-        if id_prefix is not None:
8a263f1
-            query = query.filter(ReleaseModel.id_prefix == id_prefix)
8a263f1
-
8a263f1
-        name = args.get("name")
8a263f1
-        if name is not None:
8a263f1
-            query = query.filter(ReleaseModel.name == name)
8a263f1
-
8a263f1
-        composed_by_bodhi = args.get("composed_by_bodhi")
8a263f1
-        if composed_by_bodhi is not None:
8a263f1
-            query = query.filter(ReleaseModel.composed_by_bodhi == composed_by_bodhi)
8a263f1
-
8a263f1
-        state = args.get("state")
8a263f1
-        if state is not None:
8a263f1
-            query = query.filter(ReleaseModel.state == state)
8a263f1
-
8a263f1
-        return query.all()
8a263f1
-
8a263f1
-    def resolve_getUpdates(self, info, **args):
8a263f1
-        """Answer Release queries with a given argument."""
8a263f1
-        query = Update.get_query(info)
8a263f1
-
8a263f1
-        stable_karma = args.get("stable_karma")
8a263f1
-        if stable_karma is not None:
8a263f1
-            query = query.filter(UpdateModel.stable_karma == stable_karma)
8a263f1
-
8a263f1
-        stable_days = args.get("stable_days")
8a263f1
-        if stable_days is not None:
8a263f1
-            query = query.filter(UpdateModel.stable_days == stable_days)
8a263f1
-
8a263f1
-        unstable_karma = args.get("unstable_karma")
8a263f1
-        if unstable_karma is not None:
8a263f1
-            query = query.filter(UpdateModel.unstable_karma == unstable_karma)
8a263f1
-
8a263f1
-        status = args.get("status")
8a263f1
-        if status is not None:
8a263f1
-            query = query.filter(UpdateModel.status == status)
8a263f1
-
8a263f1
-        request = args.get("request")
8a263f1
-        if request is not None:
8a263f1
-            query = query.filter(UpdateModel.request == request)
8a263f1
-
8a263f1
-        pushed = args.get("pushed")
8a263f1
-        if pushed is not None:
8a263f1
-            query = query.filter(UpdateModel.pushed == pushed)
8a263f1
-
8a263f1
-        critpath = args.get("critpath")
8a263f1
-        if critpath is not None:
8a263f1
-            query = query.filter(UpdateModel.critpath == critpath)
8a263f1
-
8a263f1
-        date_approved = args.get("date_approved")
8a263f1
-        if date_approved is not None:
8a263f1
-            query = query.filter(UpdateModel.date_approved == date_approved)
8a263f1
-
8a263f1
-        alias = args.get("alias")
8a263f1
-        if alias is not None:
8a263f1
-            query = query.filter(UpdateModel.alias == alias)
8a263f1
-
8a263f1
-        user_id = args.get("user_id")
8a263f1
-        if user_id is not None:
8a263f1
-            query = query.filter(UpdateModel.user_id == user_id)
8a263f1
-
8a263f1
-        release_name = args.get("release_name")
8a263f1
-        if release_name is not None:
8a263f1
-            query = query.join(UpdateModel.release).filter(ReleaseModel.name == release_name)
8a263f1
-
8a263f1
-        return query.all()
8a263f1
-
8a263f1
-    def resolve_getBuildrootOverrides(self, info, **args):
8a263f1
-        """Answer Release queries with a given argument."""
8a263f1
-        query = BuildrootOverride.get_query(info)
8a263f1
-
8a263f1
-        submission_date = args.get("submission_date")
8a263f1
-        if submission_date is not None:
8a263f1
-            query = query.filter(BuildrootOverrideModel.submission_date == submission_date)
8a263f1
-
8a263f1
-        expiration_date = args.get("expiration_date")
8a263f1
-        if expiration_date is not None:
8a263f1
-            query = query.filter(BuildrootOverrideModel.expiration_date == expiration_date)
8a263f1
-
8a263f1
-        build_nvr = args.get("build_nvr")
8a263f1
-        if build_nvr is not None:
8a263f1
-            query = query.join(BuildrootOverrideModel.build).filter(BuildModel.nvr == build_nvr)
8a263f1
-
8a263f1
-        submitter_username = args.get("submitter_username")
8a263f1
-        if submitter_username is not None:
8a263f1
-            query = query.join(BuildrootOverrideModel.submitter).filter(
8a263f1
-                UserModel.name == submitter_username)
8a263f1
-
8a263f1
-        return query.all()
8a263f1
-
8a263f1
-
8a263f1
-schema = graphene.Schema(query=Query)
8a263f1
diff --git a/bodhi/tests/server/services/test_graphql.py b/bodhi/tests/server/services/test_graphql.py
8a263f1
deleted file mode 100644
8a263f1
index 3bd9e29d..00000000
8a263f1
--- a/bodhi/tests/server/services/test_graphql.py
8a263f1
+++ /dev/null
8a263f1
@@ -1,251 +0,0 @@
8a263f1
-# Copyright © 2020 Red Hat, Inc. and others.
8a263f1
-#
8a263f1
-# This file is part of Bodhi.
8a263f1
-#
8a263f1
-# This program is free software; you can redistribute it and/or
8a263f1
-# modify it under the terms of the GNU General Public License
8a263f1
-# as published by the Free Software Foundation; either version 2
8a263f1
-# of the License, or (at your option) any later version.
8a263f1
-#
8a263f1
-# This program is distributed in the hope that it will be useful,
8a263f1
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
8a263f1
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
8a263f1
-# GNU General Public License for more details.
8a263f1
-#
8a263f1
-# You should have received a copy of the GNU General Public License
8a263f1
-# along with this program; if not, write to the Free Software
8a263f1
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
8a263f1
-import datetime
8a263f1
-
8a263f1
-from graphene.test import Client
8a263f1
-
8a263f1
-from bodhi.tests.server import base
8a263f1
-from bodhi.server.services.graphql import schema
8a263f1
-from bodhi.server import models
8a263f1
-
8a263f1
-
8a263f1
-class TestGraphQLService(base.BasePyTestCase):
8a263f1
-    """This class contains tests for a /graphql endpoint."""
8a263f1
-    def test_get(self):
8a263f1
-        """Ensure that a GraphQL response is returned"""
8a263f1
-        res = self.app.get('/graphql?query={%0A%20 allReleases{%0A%20%20%20 name%0A%20 }%0A}')
8a263f1
-        assert res.body == b'{"data":{"allReleases":[{"name":"F17"}]}}'
8a263f1
-
8a263f1
-    def test_allReleases(self):
8a263f1
-        """Testing allReleases."""
8a263f1
-        base.BaseTestCaseMixin.create_release(self, version='22')
8a263f1
-        client = Client(schema)
8a263f1
-        self.db.commit()
8a263f1
-
8a263f1
-        executed = client.execute("""{  allReleases{  name  }}""")
8a263f1
-        assert executed == {
8a263f1
-            "data": {
8a263f1
-                "allReleases": [{
8a263f1
-                    "name": "F17"
8a263f1
-                }, {
8a263f1
-                    "name": "F22"
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-    def test_enumfields(self):
8a263f1
-        """Testing enum fields on releases."""
8a263f1
-        base.BaseTestCaseMixin.create_release(self, version='22')
8a263f1
-        client = Client(schema)
8a263f1
-        self.db.commit()
8a263f1
-
8a263f1
-        executed = client.execute("""{  allReleases{  state    packageManager  }}""")
8a263f1
-        assert executed == {
8a263f1
-            'data': {
8a263f1
-                'allReleases': [{
8a263f1
-                    'packageManager': 'unspecified',
8a263f1
-                    'state': 'current'
8a263f1
-                }, {
8a263f1
-                    'packageManager': 'unspecified',
8a263f1
-                    'state': 'current'
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-    def test_getReleases(self):
8a263f1
-        """Testing getReleases query."""
8a263f1
-        base.BaseTestCaseMixin.create_release(self, version='22')
8a263f1
-        client = Client(schema)
8a263f1
-        self.db.commit()
8a263f1
-
8a263f1
-        executed = client.execute("""{  getReleases(idPrefix: "FEDORA"){  name  }}""")
8a263f1
-        assert executed == {
8a263f1
-            "data": {
8a263f1
-                "getReleases": [{
8a263f1
-                    "name": "F17"
8a263f1
-                }, {
8a263f1
-                    "name": "F22"
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-        executed = client.execute("""{  getReleases(name: "F17"){  id  }}""")
8a263f1
-        assert executed == {
8a263f1
-            "data": {
8a263f1
-                "getReleases": [{
8a263f1
-                    "id": "UmVsZWFzZTox"
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-        executed = client.execute("""{  getReleases(composedByBodhi: true){  name  }}""")
8a263f1
-        assert executed == {
8a263f1
-            "data": {
8a263f1
-                "getReleases": [{
8a263f1
-                    "name": "F17"
8a263f1
-                }, {
8a263f1
-                    "name": "F22"
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-        executed = client.execute(
8a263f1
-            """{  getReleases(state: "current", composedByBodhi: true){  name  }}""")
8a263f1
-        assert executed == {
8a263f1
-            "data": {
8a263f1
-                "getReleases": [{
8a263f1
-                    "name": "F17"
8a263f1
-                }, {
8a263f1
-                    "name": "F22"
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-    def test_getUpdates(self):
8a263f1
-        """Testing getUpdates query."""
8a263f1
-        release = base.BaseTestCaseMixin.create_release(self, version='22')
8a263f1
-        self.create_update(build_nvrs=['TurboGears-2.1-1.el5'],
8a263f1
-                           release_name=release.name)
8a263f1
-        up2 = self.create_update(build_nvrs=['freetype-2.10.2-1.fc32'],
8a263f1
-                                 release_name=release.name)
8a263f1
-        up2.alias = "FEDORA-2020-3223f9ec8b"
8a263f1
-        up2.stable_days = 1
8a263f1
-        up2.date_approved = datetime.datetime(2019, 10, 13, 16, 16, 22, 438484)
8a263f1
-        self.db.commit()
8a263f1
-        client = Client(schema)
8a263f1
-
8a263f1
-        executed = client.execute("""{  getUpdates(stableDays: 1,
8a263f1
-                                  dateApproved: "2019-10-13 16:16:22.438484")
8a263f1
-                                  {  alias  request  unstableKarma  }}""")
8a263f1
-        assert executed == {
8a263f1
-            "data": {
8a263f1
-                "getUpdates": [{
8a263f1
-                    "alias": "FEDORA-2020-3223f9ec8b",
8a263f1
-                    "request": "testing",
8a263f1
-                    "unstableKarma": -3
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-        executed = client.execute("""{  getUpdates(stableKarma: 3, status: "pending",
8a263f1
-                                  critpath: false, pushed: false, request:"testing"){  stableDays
8a263f1
-                                  userId  }}""")
8a263f1
-        assert executed == {
8a263f1
-            'data': {
8a263f1
-                'getUpdates': [{
8a263f1
-                    'stableDays': 0,
8a263f1
-                    'userId': 1
8a263f1
-                }, {
8a263f1
-                    'stableDays': 0,
8a263f1
-                    'userId': 1
8a263f1
-                }, {
8a263f1
-                    'stableDays': 1,
8a263f1
-                    'userId': 1
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-        executed = client.execute("""{  getUpdates(stableDays: 1,
8a263f1
-                                  unstableKarma: -3, alias: "FEDORA-2020-3223f9ec8b")
8a263f1
-                                  {  dateApproved  request  }}""")
8a263f1
-        assert executed == {
8a263f1
-            'data': {
8a263f1
-                'getUpdates': [{
8a263f1
-                    'dateApproved': "2019-10-13 16:16:22.438484",
8a263f1
-                    'request': 'testing'
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-        executed = client.execute("""{  getUpdates(critpath: false, stableDays: 1,
8a263f1
-                                  userId: 1){  request    unstableKarma  }}""")
8a263f1
-        assert executed == {
8a263f1
-            'data': {
8a263f1
-                'getUpdates': [{
8a263f1
-                    'request': 'testing',
8a263f1
-                    'unstableKarma': -3,
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-        executed = client.execute("""{  getUpdates(releaseName: "F22"){  request  }}""")
8a263f1
-        assert executed == {
8a263f1
-            'data': {
8a263f1
-                'getUpdates': [{
8a263f1
-                    'request': 'testing',
8a263f1
-                }, {
8a263f1
-                    'request': 'testing',
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-    def test_getBuildrootOverrides(self):
8a263f1
-        """Testing getBuildOverrides query."""
8a263f1
-        release = models.Release.get('F17')
8a263f1
-
8a263f1
-        package = models.RpmPackage(name='just-testing')
8a263f1
-        self.db.add(package)
8a263f1
-        build = models.RpmBuild(nvr='just-testing-1.0-2.fc17', package=package, release=release)
8a263f1
-        self.db.add(build)
8a263f1
-        another_user = models.User(name='aUser')
8a263f1
-        self.db.add(another_user)
8a263f1
-
8a263f1
-        expiration_date = datetime.datetime(2020, 10, 13, 16, 16, 22, 438484)
8a263f1
-        submission_date = datetime.datetime(2020, 10, 12, 16, 16, 22, 438484)
8a263f1
-
8a263f1
-        override = models.BuildrootOverride(build=build, submitter=another_user,
8a263f1
-                                            notes='Crazy! 😱',
8a263f1
-                                            expiration_date=expiration_date,
8a263f1
-                                            submission_date=submission_date)
8a263f1
-        self.db.add(override)
8a263f1
-        self.db.flush()
8a263f1
-        client = Client(schema)
8a263f1
-        self.db.commit()
8a263f1
-
8a263f1
-        executed = client.execute("""{  getBuildrootOverrides(buildNvr: "just-testing-1.0-2.fc17")
8a263f1
-                                  {  submissionDate  expirationDate  }}""")
8a263f1
-        assert executed == {
8a263f1
-            'data': {
8a263f1
-                'getBuildrootOverrides': [{
8a263f1
-                    'expirationDate': "2020-10-13T16:16:22.438484",
8a263f1
-                    'submissionDate': "2020-10-12T16:16:22.438484",
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-        executed = client.execute("""{  getBuildrootOverrides(submissionDate: "2020-10-12T16:16:22.438484",
8a263f1
-                                  expirationDate: "2020-10-13T16:16:22.438484")
8a263f1
-                                  {  notes  }}""")
8a263f1
-        assert executed == {
8a263f1
-            'data': {
8a263f1
-                'getBuildrootOverrides': [{
8a263f1
-                    'notes': "Crazy! 😱"
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
-
8a263f1
-        executed = client.execute("""{  getBuildrootOverrides(submitterUsername: "aUser",
8a263f1
-                                  expirationDate: "2020-10-13T16:16:22.438484")
8a263f1
-                                  {  notes  }}""")
8a263f1
-        assert executed == {
8a263f1
-            'data': {
8a263f1
-                'getBuildrootOverrides': [{
8a263f1
-                    'notes': "Crazy! 😱"
8a263f1
-                }]
8a263f1
-            }
8a263f1
-        }
8a263f1
diff --git a/requirements.txt b/requirements.txt
8a263f1
index b66508b5..a7cf46df 100644
8a263f1
--- a/requirements.txt
8a263f1
+++ b/requirements.txt
8a263f1
@@ -10,9 +10,6 @@ dogpile.cache
8a263f1
 pyasn1-modules  # Due to an unfortunate dash in its name, installs break if pyasn1 is installed first
8a263f1
 fedora_messaging
8a263f1
 feedgen>=0.7.0
8a263f1
-graphene
8a263f1
-graphene-sqlalchemy
8a263f1
-koji
8a263f1
 jinja2
8a263f1
 markdown>=3.0
8a263f1
 prometheus_client
8a263f1
@@ -28,5 +25,4 @@ PyYAML
8a263f1
 simplemediawiki
8a263f1
 sqlalchemy
8a263f1
 waitress
8a263f1
-WebOb-GraphQL
8a263f1
 whitenoise
8a263f1
diff --git a/setup.py b/setup.py
8a263f1
index 1cb2f24b..c0269319 100644
8a263f1
--- a/setup.py
8a263f1
+++ b/setup.py
8a263f1
@@ -111,7 +111,7 @@ client_setup = {
8a263f1
     'keywords': 'fedora',
8a263f1
     'packages': client_pkgs,
8a263f1
     'include_package_data': False,
8a263f1
-    'install_requires': ['click', 'python-fedora >= 0.9.0', 'koji'],
8a263f1
+    'install_requires': ['click', 'python-fedora >= 0.9.0'],
8a263f1
     'entry_points': '''
8a263f1
         [console_scripts]
8a263f1
         bodhi = bodhi.client:cli
8a263f1
-- 
8a263f1
2.28.0
8a263f1