Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
60 lines (38 sloc) 1.95 KB


This guide briefly describes how to implement custom backend. Please see some of existing backends as example.

Minimal backend

Lets assume that your new backend will be called foo. You always need to create the following three classes within your backend file.

Import everything from the copr_rebuild_tools package that you will need

from copr_rebuild_tools import Backend, CoprBackend, Entity

First you need to create your own descendant of Entity class. It will represent one module/gem/package from the backend. While creating objects from your entity, you can pass all parameters as kwargs to the constructor. No naming conventions are required.

class MyEntity(Entity):
    name = ...

Next, you will need to implement Foo class. It will serve for getting information from the backend. For basic functionality it is necessary to implement the get_all method which returns list of individual modules/gems/packages as MyEntity instances.

class Foo(Backend):
    def get_all(self):

Last, you will need to implement CoprFoo class which will communicate with Copr service. For basic functionality it is required to implement submit method which takes an instance of MyEntity and submits its build into Copr.

class CoprFoo(CoprBackend):
    def submit(self, entity):

New packages

Required for --new-packages

You will need to implement pkgname property to generate proper package name according to Fedora packaging guidelines.

class MyEntity(...):
    def pkgname(self):


Version comparison

Required for --new-versions Depends on --new-packages

You will need to pass entity version while its initialization or implement a property to obtaining it on the fly.

class MyEntity(...):
    version = ...