• Stars
    star
    160
  • Rank 234,703 (Top 5 %)
  • Language
    Python
  • License
    Other
  • Created over 16 years ago
  • Updated almost 13 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Python interface for talking to the github API

What's on Github?

This is a library that implements github's API in python.

Supported APIs

All API access begins with the creation of a GitHub object. For the sake of brevity, this document assumes you've created an object called gh as a github endpoint:

gh = github.GitHub()

Some operations require (or are enhanced by) authentication. These are noted within the documentation and will use an object called agh created the following way:

agh = github.GitHub('myusername', 'mytoken')

You can find your token from your account page.

User

The user API is available via gh.users.

Search

This is a simple user search call. All properties returned by the API will be available as properties.

Example displaying search results using the name and fullname properties:

for u in gh.users.search(myquery):
    print("User:  %s (%s)" % (u.name, u.fullname))

Show

Get details about an individual user.

username = 'dustin'
print "%s's web site:  %s" % (username, gh.users.show(username).blog)

Note that this API returns more information if you're authenticated and ask for yourself:

print("My disk usage: %d" % agh.users.show(me).disk_usage)

Keys

List your ssh keys:

print "Names of my keys:"
for k in list(agh.users.keys()):
    print(k.title)

Repositories

The repository API is available via gh.repos.

Repository List for a User

List the repositories owned by a user. If you are authenticated this user, private repositories will also be returned.

print "My repo names:"
for r in gh.repos.forUser(me):
    print(r.name)

Branches Within a Repo

List the branches within a repo:

print("memcached branches:")
for branchname, branchhash in gh.repos.branches('dustin', 'memcached'):
    print(branchname)

Search for a Repository

for r in gh.repos.search('memcached'):
    print("%s's %s" % (r.username, r.name))

Show a Repository

Retrieve an individual repository.

print(gh.repos.show('dustin', 'py-github').homepage)

Watch a Repository

Begin watching a repository.

gh.repos.watch('dustin', 'memcached')

Unwatch a Repository

Stop watching a repository.

gh.repos.unwatch('dustin', 'memcached')

Get a Repository's Network

Retrieve the network for a repository.

for r in gh.repos.network('dustin', 'memcached'):
    print("%s's %s" % (r.owner, r.name))

Adjust a Repository's Visibility

You can adjust repository visibility for your own repositories only (therefore the username is omitted).

To set a repository public:

agh.repos.setVisible('repo-name')

To set a repository private:

agh.repos.setVisible('repo-name', False)

Create a New Repository

The most simple invocation (create a public repository with no description or URL) would look like this:

agh.repos.create('testrepository')

You can pass many flags in to set up the repository, however. Consider this case where a private repository is created.

agh.repos.create('testrepo', description='My test repo',
                 homepage='http://www.spy.net/', public=0)

Deleting a Repository

You may delete repositories attached to your account only.

agh.repos.delete('testrepo')

Forking a Repository

agh.repos.fork('dustin', 'memcached')

Adding a Collaborator

agh.repos.addCollaborator('memcached', 'trondn')

Removing a Collaborator

agh.repos.removeCollaborator('memcached', 'trondn')

Listing Deploy Keys

agh.repos.deployKeys('myrepo')

Add a Deploy Key

keyContents = open(os.path.expanduser("~/.ssh/id_dsa.pub")).read()
agh.repos.addDeployKey('myrepo', 'Key Name', keyContents)

Remove a Deploy Key

agh.repos.removeDeployKey('myrepo', 8582)

Commits

The commit API is available via gh.commits.

Get the Commits from a Branch

Master is assumed:

for c in gh.commits.forBranch('dustin', 'py-github'):
    print("%s %s" % (c.id[:7], c.message[:60].split("\n")[0]))

Otherwise, you can specify a branch name:

for c in gh.commits.forBranch('dustin', 'py-github', 'v2'):
    print("%s %s" % (c.id[:7], c.message[:60].split("\n")[0]))

Get the Commits Affecting a File

Retrieve all of the commits for the specified file. Again, master is assumed):

for c in gh.commits.forFile('dustin', 'py-github', 'README.markdown'):
    print("%s %s" % (c.id[:7], c.message[:60].split("\n")[0]))

...but you can also specify a branch name:

for c in gh.commits.forFile('dustin', 'py-github', 'README.markdown', 'v2'):
    print("%s %s" % (c.id[:7], c.message[:60].split("\n")[0]))

Show a Specific Commit

print gh.commits.show('dustin', 'memcached',
    '923a335bf8613696d658448cd9c48a963924d436').message

Issues

The issues api is available via gh.issues.

List Repository Issues

for i in gh.issues.list('dustin', 'py-github'):
    print("issue #%s:  %s" % (i.number, i.title))

Show a Particular Issue

i = gh.issues.show('dustin', 'py-github', 1)
print("%s:  %s" % (i.state, i.title))

Add a Label to an Issue

agh.issues.add_label('dustin', 'py-github', 38, 'awesome')

Remove a Label from an Issue

agh.issues.remove_label('dustin', 'py-github', 38, 'fun')

Close an Issue

agh.issues.close('dustin', 'py-github', 38)

Reopen a Closed Issue

agh.issues.reopen('dustin', 'py-github', 38)

Create a New Issue

agh.issues.new('dustin', 'py-github', 'more code', 'Write more code.')

The body parameter (last) is optional.

Edit an Existing Issue

agh.issues.edit('dustin', 'py-github', 8284, 'New Title', 'New Body')

Objects

The objects API is available via gh.objects.

Get a Tree

Retreive the tree object with the given hash:

t = gh.objects.tree('dustin', 'py-github',
    'b34f658fd7be0d3e00cc961b75da10ca0d44d050')
for k,v in list(t.items()):
    print "%s\t%s\t%s" % (v.sha, v.type, k)

Retrieve a Blob (with info)

b = gh.objects.blob('dustin', 'py-github',
    'b34f658fd7be0d3e00cc961b75da10ca0d44d050', 'README.markdown')
print b.data

Retrieve a Raw Blob

print b.raw_blob('dustin', 'py-github',
    'a1ae3723758a0dc1ea857e9efe6640f18a6b3865')

Organizations

The organizations API is available via gh.organizations.

Getting Organization Information

Get the full information on organizations by the screen name.

org = 'ff0000'
print "%s's location:  %s" % (org, gh.organizations.show(org).location)

Updating fields

Owners can update the organization with these fields:

  • name

  • email

  • blog

  • company

  • location

  • billing_email

    org = 'ff0000' print "%s's old location: %s" % (org, gh.organizations.show(org).location) agh.organizations.set('ff0000', location='Los Angeles, CA')

Checking Organization Membership

Get all the public organizations that a user is part of. If you are authenticated, concealed memberships will also be returned.

print "My organizations:"
for org in gh.organizations.forUser(me):
    print org

Listing Organization Memberships

List all repositories across all the organizations that you can access.

print "Repositories of my organizations:"
for repo in agh.organizations.repositories():
    print repo.name

List all members of the organization's Owners team:

print "Owner of my organization:"
for owner in agh.organizations.owners('ff0000'):
    print owner.name

List all public repositories of any other organization:

print "Public repositories of the github organization:"
for repo in gh.organizations.publicRepositories('github'):
    print repo.name

List all public members of any organization:

print "Public members of the github organization:"
for member in gh.organizations.publicMembers('github'):
    print member.name

More Repositories

1

go-humanize

Go Humans! (formatters for units to human friendly sizes)
Go
3,866
star
2

java-memcached-client

A simple, asynchronous, single-threaded memcached client written in java.
Java
496
star
3

seriesly

A time series database.
Go
461
star
4

go-coap

Implementation of CoAP in go.
Go
341
star
5

gomemcached

A memcached binary protocol toolkit for go.
Go
316
star
6

go-probably

Probabilistic Data Structures for Go
Go
255
star
7

go-broadcast

A trivial channel pubsub I use in lots of projects.
Go
242
star
8

gitmirror

A web server to receive webhooks and mirror git repos.
Go
168
star
9

beanstalk-tools

Various tools for watching beanstalkd.
Ruby
164
star
10

bindir

My ~/bin
Python
136
star
11

mac-zfs

Continuing where Apple left off with ZFS.
C
124
star
12

go-heatmap

Heatmap creation stuff for go.
Go
111
star
13

twitty-twister

A twisted client for twitter-like APIs.
Python
108
star
14

labrea

Scripting other people's programs.
C
104
star
15

go-wikiparse

mediawiki dump parser for loading up wikipedia data
Go
100
star
16

gopro

Tools for making the most out of GoPro Plus.
Haskell
92
star
17

twitterspy

A twitter <-> XMPP gateway with search and track and other good stuff.
Python
79
star
18

randbo

In a world of decreasing entropy, it's time to introduce some chaos.
Go
70
star
19

elock

A simple, fault-tolerant distributed lock server in erlang.
Erlang
67
star
20

go-nntp

NNTP client and server for the go language.
Go
54
star
21

ememcached

A framework for building erlang memcached servers.
Erlang
50
star
22

slosh

Lazy realtime web.
Python
44
star
23

whatsup

My web monitoring jabber bot.
Python
44
star
24

mqtt-hs

Haskell MQTT client.
Haskell
40
star
25

snippets

My junk drawer. Various things I've played with in various states.
C
38
star
26

go-jsonpointer

jsonpointer implementation for go
Go
36
star
27

beanstalk-client-ruby

Keith Rarick's ruby client for beanstalk
Ruby
35
star
28

go-rs232

RS232 / Serial interface for go
Go
34
star
29

go-aprs

APRS libs and tools for go.
Go
32
star
30

erl-conc

Concurrent Lists in Erlang
Erlang
29
star
31

logic-pwm

PWM Analyzer for Saleae Logic
C++
29
star
32

waitforsocket

A simple program to help you react more quickly to servers and services coming back online.
Nix
28
star
33

go-saturate

Double-fanout pipeline for saturating all the things.
Go
23
star
34

go-follow

Follow (tail -f) an io.Reader, blocking on EOF until more data arrive.
Go
22
star
35

logic-ws2812

Logic Analyzer plugin for WS2812 addressable LEDs.
C++
22
star
36

twisted-gears

A twisted interface to gearman.
Python
21
star
37

ruby-trie

Hacks on a ruby trie implementation from Dan Erat
Ruby
21
star
38

go-elasticsearch

Elasticsearch interface for go
Go
21
star
39

memcached-test

Python memcached binary protocol client and server (used primarily for testing and protocol experimentation).
Python
21
star
40

gopro-plus

GoPro Plus cloud service interface in Haskell.
Haskell
20
star
41

frames

A simple channeling protocol.
Go
19
star
42

ruby-freebase

A ruby client for freebase
Ruby
18
star
43

go-nma

A go interface to NotifyMyAndroid
Go
17
star
44

logexec

A log redirection thing.
Go
16
star
45

mqttd

a complete mqtt v5 broker
Haskell
16
star
46

go-hashset

A set of hashes.
Go
16
star
47

replaykit

A toolkit for replaying time series data.
Go
16
star
48

yellow

Raise awareness of slow functions
Go
15
star
49

tesla

Tesla API for Haskell
Haskell
15
star
50

twisted-memcached

memcached protocol in twisted
Python
15
star
51

papertrails

My papertrail S3 log aggregator tool
Nix
14
star
52

beanstalk-xmpp

A stupidly simple beanstalk -> xmpp gateway to connect various services to IM.
Python
14
star
53

photo-couch

couchapp photo album
JavaScript
14
star
54

buildwatch

A buildbot GUI for OS X
Objective-C
12
star
55

BreakDancer

It thinks of everything.
Python
12
star
56

logic-cppm

CPPM Analyzer for Saleae Logic
C++
12
star
57

gojson

Fork of go's encoding/json with the scanner API made public.
Go
12
star
58

etest

A tool to help coordinate distributed tests.
Erlang
11
star
59

go-couchstore

Go interface to libcouchstore.
Go
11
star
60

beanstalk-client-twisted

A beanstalk client for the twisted network framework.
Python
11
star
61

graphex

Dependency graph viewer CLI tool
Haskell
10
star
62

dotfiles

Finally pushing up my dotfiles from hg.
Emacs Lisp
10
star
63

httputil

HTTP client and server utilities for go
Go
10
star
64

dustin.sallings.org

My github page.
HTML
10
star
65

ibutton

My 1wire protocol stack and related tools
C
10
star
66

app-hider

OS X app that helps you focus by hiding applications you aren't paying attention to.
Objective-C
10
star
67

mc-hammer

A simple load testing tool.
C++
9
star
68

urlwatch

Watch broken URLs from the commandline. Be told when stuff starts working again.
Go
9
star
69

pfetch

A web service consumer.
Go
9
star
70

logmerge

Combines several compressed web logfiles (including S3) into a single common log file very quickly.
C++
9
star
71

mccouch

Memcached Interface for CouchDB
Erlang
9
star
72

kvtest

A framework for testing low-level key/value stores.
C++
9
star
73

environ

My environmental monitoring stuff for the house.
Erlang
8
star
74

influxer

MQTT -> InfluxDB ingestion thing.
Haskell
8
star
75

photoupload

A Mac OS X photo uploader program for my photo album.
Objective-C
8
star
76

wwcp

WWCP
Go
8
star
77

noelani

Noelani's web site
Ruby
7
star
78

go-couch

CouchDB API
Go
7
star
79

spyjar

My generally useful java library I take wherever I go.
Java
7
star
80

diff

Different strokes.
Go
7
star
81

testingbee

Port of Go's testing.B to C
C
7
star
82

go-yammer

A yammer interface for go
Go
7
star
83

photo

My photo album project.
Common Lisp
7
star
84

githubhooks

A thing to watch all github repos and fire hooks from them.
Go
7
star
85

py-backpack

Python interface to backpack.
Python
7
star
86

memcached_mon

A processing hack for visualizing memcached data in real(ish) time.
Processing
6
star
87

websaver

Use a URL as a screen saver.
Objective-C
6
star
88

washer

Code for my washer project.
Arduino
6
star
89

arduino-2406

A 1Wire DS2406 Control Library for Arduino.
Processing
6
star
90

twitter-pub

Simple service to publish a twitter stream to an XMPP pubsub node.
Python
6
star
91

go-nmea

Parsing messages from an NMEA stream
Go
6
star
92

location

Location, location, location.
JavaScript
6
star
93

tesladb

Thing to grab data from the Tesla API and store it in sqlite and mqtt.
Haskell
6
star
94

twisted-friends

A friendfeed client for twisted.
Python
6
star
95

gearman-ocaml

OCaml library for gearman
OCaml
6
star
96

ruby-summize

A ruby client for the summize conversational search engine.
Ruby
6
star
97

money

My money tracking app. There are many like it, but this one is mine.
Ruby
6
star
98

gerrit-couch

couchapp for showing gerrit activity
JavaScript
6
star
99

rpics

My reddit pictures capture thing.
JavaScript
5
star
100

dvdbackup

Bug fixes of Olaf Beck's dvdbackup pulled somewhere off the web.
C
5
star