view bzconsole/main.py @ 5:43fb6fd8903d

stub for new bug
author Jeff Hammel <jhammel@mozilla.com>
date Tue, 02 Nov 2010 11:27:26 -0700
parents 9ee7b8236c36
children 873a703555e9
line wrap: on
line source

#!/usr/bin/env python
"""
console API to bugzilla
"""

import os
import subprocess
import sys

from command import CommandParser

import json
import urllib
import urllib2

class BZapi(object):
    """
    console API to bugzilla
    """

    def __init__(self, server='https://api-dev.bugzilla.mozilla.org/latest'):
        self.server = server

    def products(self, classification=None):
        """list bugzilla products"""
        configuration = self._configuration()
        if classification:
            products = [i for i in configuration['product'] if configuration['product'][i]['classification'] == 'Components']
            return sorted(products)
        else:
            return sorted(configuration['product'].keys())

    def components(self, product):
        """list bugzilla components for a particular product"""
        configuration = self._configuration()
        assert product in configuration['product'], 'Product %s not found' % product
        return sorted(configuration['product'][product]['component'].keys())

    def new(self, title, product, component):
        raise NotImplementedError

    def _configuration(self):
        if not hasattr(self, '__configuration'):
            self.__configuration = self._request('/configuration')
        return self.__configuration

    def _request(self, path, data=None):
        url = self.server + path
        headers = {'Accept': 'application/json',
                   'Content-Type': 'application/json'}
        if data:
            raise NotImplementedError
        req = urllib2.Request(url, data, headers)
        response = urllib2.urlopen(req)
        the_page = response.read()
        return json.loads(the_page)

def main(args=sys.argv[1:]):
    parser = CommandParser(BZapi)
    options, args = parser.parse_args(args)
    parser.invoke(args)

if __name__ == '__main__':
    main()