Source

python-bitbucket / api.py

Full commit
Kevin Veroneau 298102b 
Kevin Veroneau 382c1b7 





Kevin Veroneau 298102b 
Kevin Veroneau 382c1b7 








Kevin Veroneau 298102b 
Kevin Veroneau 382c1b7 

Kevin Veroneau 298102b 











Kevin Veroneau 382c1b7 
Kevin Veroneau fb6b648 


Kevin Veroneau 382c1b7 











Kevin Veroneau 298102b 
Kevin Veroneau 382c1b7 

Kevin Veroneau 298102b 
Kevin Veroneau 382c1b7 
















Kevin Veroneau 298102b 



Kevin Veroneau 382c1b7 
Kevin Veroneau 298102b 
Kevin Veroneau 382c1b7 





Kevin Veroneau 298102b 





Kevin Veroneau 382c1b7 
Kevin Veroneau 298102b 





Kevin Veroneau 382c1b7 

# -*- coding: utf-8 -*-
import cookielib
import urllib2
import base64
import json
from urllib import urlencode

class Issue(object):
    title = ""
    content = ""
    component = None
    milestone = None
    version = None
    responsible = None
    priority = "major"
    status = "new"
    kind = "bug"
    def __init__(self, api, username, repository, data=None):
        self.api = api
        self.responsible = username
        self.url = 'repositories/%s/%s/issues/' % (username, repository)
        if data:
	    self.url = 'repositories/%s/%s/issues/%s/' % (username, repository, data['local_id'])
	    self.title = data['title']
	    self.content = data['content']
	    self.component = data['metadata']['component']
	    self.milestone = data['metadata']['milestone']
	    self.version = data['metadata']['version']
	    self.responsible = data['responsible']['username']
	    self.priority = data['priority']
	    self.status = data['status']
	    self.kind = data['metadata']['kind']

    def __repr__(self):
        return "<Issue: %s>" % self.title

    def as_dict(self):
        data = {'title':self.title, 'content':self.content, 'priority':self.priority, 'status':self.status, 'kind':self.kind}
        data.update({'responsible':self.responsible})
        if self.component:
	    data.update({'component':self.component})
	if self.milestone:
	    data.update({'milestone':self.milestone})
	if self.version:
	    data.update({'version':self.version})
	return data

    def save(self):
        self.json = self.api.post(self.url, self.as_dict())
        return self.json

class API(object):
    api_url = 'https://api.bitbucket.org/1.0/'

    def __init__(self, username, password, proxy=None):
        encodedstring = base64.encodestring("%s:%s" % (username, password))[:-1]
        self._auth = "Basic %s" % encodedstring
        self._opener = self._create_opener(proxy)

    def _create_opener(self, proxy=None):
        cj = cookielib.LWPCookieJar()
        cookie_handler = urllib2.HTTPCookieProcessor(cj)
        if proxy:
            proxy_handler = urllib2.ProxyHandler(proxy)
            opener = urllib2.build_opener(cookie_handler, proxy_handler)
        else:
            opener = urllib2.build_opener(cookie_handler)
        return opener

    def _request(self, url, data=None):
        query_url = self.api_url + url
        if data:
	  data = urlencode(data)
        try:
	    req = urllib2.Request(query_url, data, {"Authorization": self._auth })
	    handler = self._opener.open(req)
	except urllib2.HTTPError, e:
	    print e.headers
	    raise e
	return json.load(handler)

    def post(self, url, data):
        return self._request(url, data)

    def get(self, url):
        return self._request(url, None)
    
    def get_issues(self, username, repository):
        json = self.get('repositories/%s/%s/issues/' % (username, repository))
        issues = []
        for i in json['issues']:
	    issue = Issue(self, username, repository, i)
	    issues.append(issue)
	return issues
        
    def new_issue(self, username, repository):
        return Issue(self, username, repository)