Skip to main content

Fetch data from software repositories

Project description

Perceval Build Status Coverage Status PyPI version Documentation in RTD

Send Sir Perceval on a quest to retrieve and gather data from software repositories.


usage: perceval [-c <file>] [-g] <backend> [<args>] | --help | --version

Repositories are reached using specific backends. The most common backends
    askbot           Fetch questions and answers from Askbot site
    bugzilla         Fetch bugs from a Bugzilla server
    bugzillarest     Fetch bugs from a Bugzilla server (>=5.0) using its REST API
    confluence       Fetch contents from a Confluence server
    discourse        Fetch posts from Discourse site
    dockerhub        Fetch repository data from Docker Hub site
    gerrit           Fetch reviews from a Gerrit server
    git              Fetch commits from Git
    github           Fetch issues, pull requests and repository information from GitHub
    gitlab           Fetch issues, merge requests from GitLab
    googlehits       Fetch hits from Google API
    groupsio         Fetch messages from
    hyperkitty       Fetch messages from a HyperKitty archiver
    jenkins          Fetch builds from a Jenkins server
    jira             Fetch issues from JIRA issue tracker
    launchpad        Fetch issues from Launchpad issue tracker
    mattermost       Fetch posts from a Mattermost server
    mbox             Fetch messages from MBox files
    mediawiki        Fetch pages and revisions from a MediaWiki site
    meetup           Fetch events from a Meetup group
    nntp             Fetch articles from a NNTP news group
    phabricator      Fetch tasks from a Phabricator site
    pipermail        Fetch messages from a Pipermail archiver
    redmine          Fetch issues from a Redmine server
    rss              Fetch entries from a RSS feed server
    slack            Fetch messages from a Slack channel
    stackexchange    Fetch questions from StackExchange sites
    supybot          Fetch messages from Supybot log files
    telegram         Fetch messages from the Telegram server
    twitter          Fetch tweets from the Twitter Search API

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show version
  -c FILE, --config FILE
                        set configuration file
  -g, --debug           set debug mode on

Run 'perceval <backend> --help' to get information about a specific backend.


  • Python >= 3.4
  • python3-dateutil >= 2.6
  • python3-requests >= 2.7
  • python3-bs4 (beautifulsoup4) >= 4.3
  • python3-feedparser >= 5.1.3
  • python3-dulwich >= 0.18.5
  • grimoirelab-toolkit >= 0.1.4


There are several ways for installing Perceval on your system: from packages, from a docker image or from the source code.


Perceval can be installed using pip, a tool for installing Python packages. To do it, run the next command:

$ pip3 install perceval


A Perceval Docker image is available at DockerHub.

Detailed information on how to run and/or build this image can be found here.

Source code

To install from the source code you will need to clone the repository first:

$ git clone

Then you can execute the following commands:

$ pip3 install -r requirements.txt
$ pip3 install .

In case you are a developer, you should execute the following commands to install Perceval in your working directory (option -e) and the packages of requirements_tests.txt.

$ pip3 install -r requirements.txt
$ pip3 install -r requirements_tests.txt
$ pip3 install -e .


Documentation is generated automagically in the ReadTheDocs Perceval site.


If you use Perceval in your research papers, please refer to Perceval: software project data at your will -- Pre-print:

APA style

Dueñas, S., Cosentino, V., Robles, G., & Gonzalez-Barahona, J. M. (2018, May). Perceval: software project data at your will. In Proceedings of the 40th International Conference on Software Engineering: Companion Proceeedings (pp. 1-4). ACM.


  title={Perceval: software project data at your will},
  author={Due{\~n}as, Santiago and Cosentino, Valerio and Robles, Gregorio and Gonzalez-Barahona, Jesus M},
  booktitle={Proceedings of the 40th International Conference on Software Engineering: Companion Proceeedings},



$ perceval askbot '' --from-date '2016-01-01'


To fetch bugs from Bugzilla, you have two options:

a) Use the traditional backend

$ perceval bugzilla '' --backend-user user --backend-password pass --from-date '2016-01-01'

b) Use the REST API backend for Buzilla 5.0 (or higher) servers. We strongly recommend this backend when data is fetched from version servers >=5.0 because the retrieval process is much faster.

$ perceval bugzillarest '' --backend-user user --backend-password pass --from-date '2016-01-01'


$ perceval confluence '' --from-date '2016-01-01'


$ perceval discourse '' --from-date '2016-01-01'

Docker Hub

$ perceval dockerhub grimoirelab perceval


To run gerrit, you will need an authorized SSH private key:

$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/id_rsa
Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)

To run the backend, execute the next command:

$ perceval gerrit --user user '' --from-date '2016-01-01'


To run this backend execute the next command. Take into account that to run this backend Git program has to be installed on your system.

$ perceval git '' --from-date '2016-01-01'

Git backend can also work with a Git log file as input. We recommend to use the next command to get the most complete log file.

git log --raw --numstat --pretty=fuller --decorate=full --parents --reverse --topo-order -M -C -c --remotes=origin --all > /tmp/gitlog.log

Then, to run the backend, just execute any of the next commands:

$ perceval git --git-log '/tmp/gitlog.log' 'file:///myrepo.git'


$ perceval git '/tmp/gitlog.log'


$ perceval github elastic logstash --from-date '2016-01-01'

The GitHub backend accepts the categories issue, pull_request and repository which allow to fetch the specific data.

$ perceval github --category issue elastic logstash


$ perceval gitlab elastic logstash --from-date '2016-01-01'


$ perceval googlehits "bitergia grimoirelab"

$ perceval groupsio 'updates' -t 'abcdefghijk' --from-date '2016-01-01'

In order to get an api_token, you should first subscribe to a group via the website and then execute the following command:

$ curl "" -u 123456: -d "email=<your email address>&password=<your password>"

In case you want to know the group names where your token is subscribed, you can use the following script:


$ perceval hyperkitty '' --from-date 2017-01-01


$ perceval jenkins ''


$ perceval jira '' --project PUP --from-date '2016-01-01'


$ perceval launchpad ubuntu --from-date '2016-01-01'


$ perceval mattermost '' jgw7jdmjkjf19ffkwnw59i5f9e --from-date '2016-01-01' -t 'abcdefghijk'


$ perceval mbox '' /tmp/mboxes/


$ perceval mediawiki '' --from-date '2016-06-30'


$ perceval meetup 'Software-Development-Analytics' --from-date '2016-06-01' -t abcdefghijk


$ perceval nntp '' '' --offset 10


$ perceval phabricator '' -t 123456789abcefe


$ perceval pipermail ''

Pipermail also is able to fetch data from Apache's mod_box interface:

$ perceval pipermail ''


$ perceval redmine '' --from-date '2016-01-01' -t abcdefghijk


$ perceval rss ''


$ perceval slack C0001 --from-date 2016-01-12 -t abcedefghijk


$ perceval stackexchange --site stackoverflow --tagged python --from-date '2016-01-01' -t abcdabcdabcdabcd


$ perceval supybot '' /tmp/supybot/


Telegram backend needs an API token to authenticate the bot. In addition and in order to fetch messages from a group or channel, privacy settings must be disabled. To know how to create a bot, to obtain its token and to configure it please read the Telegram Bots docs pages.

$ perceval telegram mybot -t 12345678abcdefgh --chats 1 2 -10


Twitter backend needs a bearer token to authenticate the requests. It can be obtained using the code available on GistGitHub:

$ perceval twitter grimoirelab -t 12345678abcdefgh

Running tests

Perceval comes with a comprehensive list of unit tests. To run them, in addition to the dependencies installed with Perceval, you need httpretty.


Licensed under GNU General Public License (GPL), version 3 or later.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for perceval, version 0.12.24
Filename, size File type Python version Upload date Hashes
Filename, size perceval-0.12.24-py3-none-any.whl (183.9 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size perceval-0.12.24.tar.gz (884.1 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page