Skip to content

Commit

Permalink
Wrote "pkgwat contents" command.
Browse files Browse the repository at this point in the history
  • Loading branch information
ralphbean committed Jun 27, 2012
1 parent f4c1fb9 commit 70a5c3e
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 1 deletion.
63 changes: 62 additions & 1 deletion pkgwat/api.py
Expand Up @@ -3,8 +3,25 @@
import json
import requests

import pkgwat
import pkgwat.utils

import requests.defaults
requests.defaults.defaults['base_headers']['User-Agent'] = \
'pkgwat/' + pkgwat.__version__


# TODO -- Tie this into cliff's verbosity options
DEBUG_REQUESTS = False
if DEBUG_REQUESTS:
import sys

class myobj(object):
def write(self, message):
print "DEBUG:", message

requests.defaults.defaults['verbose'] = myobj()


BASE_URL = "https://apps.fedoraproject.org/packages/fcomm_connector"

Expand Down Expand Up @@ -34,6 +51,21 @@
"obsolete",
]

yum_releases = [
'Rawhide',
'Fedora 16',
'Fedora 16 Testing',
'Fedora 15',
'Fedora 15 Testing',
'Fedora 14',
'Fedora 14 Testing',
]

yum_arches = [
'x86_64',
'i686',
]


def _make_request(path, query, strip_tags):
query_as_json = json.dumps(query)
Expand Down Expand Up @@ -118,4 +150,33 @@ def updates(package, release="all", status="all", rows_per_page=10,

return _make_request(path, query, strip_tags)

# TODO -- write the bugs query

def bugs(package, rows_per_page=10, start_row=0, strip_tags=True):
raise NotImplementedError


def contents(package, arch="x86_64", release="Rawhide", strip_tags=True):
# This one behaves a little differently

if release not in yum_releases:
raise ValueError("Invalid yum release. %r %r" % (
release, yum_releases))

if arch not in yum_arches:
raise ValueError("Invalid yum arch. %r %r" % (
arch, yum_arches))

path = "yum/get_file_tree"
query = {
"package": package,
"arch": arch,
"repo": release,
}
url = "/".join([BASE_URL, path])
response = requests.get(url, params=query)
d = json.loads(response.text)

if strip_tags:
d = pkgwat.utils.strip_tags(d)

return d
38 changes: 38 additions & 0 deletions pkgwat/subcommands.py
@@ -1,4 +1,5 @@
import logging
import sys

import pkgwat.api

Expand Down Expand Up @@ -189,3 +190,40 @@ def take_action(self, args):
raise NotImplementedError(
"We need to fix a bug in the upstream webapp first. Coming soon!"
)


class Contents(cliff.command.Command):
""" Show contents of a package """

log = logging.getLogger(__name__)

def get_parser(self, prog_name):
parser = super(type(self), self).get_parser(prog_name)
parser.add_argument('package')
parser.add_argument('--arch', dest='arch', default='x86_64',
help="One of %s" % (
', '.join(pkgwat.api.yum_arches)))
parser.add_argument('--release', dest='release', default='Rawhide',
help="One of %s" % (
', '.join(pkgwat.api.yum_releases)))
return parser

def take_action(self, args):
result = pkgwat.api.contents(
args.package,
arch=args.arch,
release=args.release,
)
self._recursive_print(result)
sys.exit(0)

def _recursive_print(self, d, prefix='/'):
if type(d) == list:
[self._recursive_print(element) for element in d]

if type(d) == dict:
filename = prefix + d['data']['title']
if 'children' not in d:
sys.stdout.write(filename + "\n")
for child in d.get('children', []):
self._recursive_print(child, prefix=filename + '/')
1 change: 1 addition & 0 deletions setup.py
Expand Up @@ -86,6 +86,7 @@
'builds = pkgwat.subcommands:Builds',
'updates = pkgwat.subcommands:Updates',
'bugs = pkgwat.subcommands:Bugs',
'contents = pkgwat.subcommands:Contents',
],
},
)

0 comments on commit 70a5c3e

Please sign in to comment.