9
import piston_mini_client.auth
11
from softwarecenter.paths import SOFTWARE_CENTER_CACHE_DIR
12
from softwarecenter.backend.piston.scaclient import SoftwareCenterAgentAPI
14
LOG = logging.getLogger(__name__)
16
from softwarecenter.backend.piston.sso_helper import SSOLoginHelper
18
if __name__ == "__main__":
22
parser = argparse.ArgumentParser(description="Helper for software-center-agent")
23
parser.add_argument("--debug", action="store_true", default=False,
24
help="enable debug output")
25
parser.add_argument("--ignore-cache", action="store_true", default=False,
26
help="force ignore cache")
27
parser.add_argument("--parent-xid", default=0,
28
help="xid of the parent window")
30
subparser = parser.add_subparsers(title="Commands")
32
command = subparser.add_parser("available_apps")
33
command.add_argument("lang")
34
command.add_argument("series")
35
command.add_argument("arch")
36
command.set_defaults(command="available_apps")
39
command = subparser.add_parser("available_apps_qa")
40
command.add_argument("lang")
41
command.add_argument("series")
42
command.add_argument("arch")
43
command.set_defaults(command="available_apps_qa")
45
command = subparser.add_parser("subscriptions_for_me")
46
command.set_defaults(command="subscriptions_for_me")
48
command = subparser.add_parser("exhibits")
49
command.add_argument("lang")
50
command.add_argument("series")
51
command.set_defaults(command="exhibits")
53
args = parser.parse_args()
56
LOG.setLevel(logging.DEBUG)
61
cachedir = os.path.join(SOFTWARE_CENTER_CACHE_DIR, "scaclient")
64
# check if auth is required
65
if args.command in ("available_apps_qa", "subscriptions_for_me"):
66
helper = SSOLoginHelper(args.parent_xid)
67
token = helper.get_oauth_token_and_verify_sync()
68
# if we don't have a token, error here
70
sys.stderr.write("ERROR: can not obtain a oauth token\n")
73
auth = piston_mini_client.auth.OAuthAuthorizer(token["token"],
74
token["token_secret"],
75
token["consumer_key"],
76
token["consumer_secret"])
77
scaclient = SoftwareCenterAgentAPI(cachedir=cachedir, auth=auth)
79
scaclient = SoftwareCenterAgentAPI(cachedir=cachedir)
84
if args.command in ("available_apps", "available_apps_qa"):
85
kwargs = {"lang": args.lang,
86
"series": args.series,
91
if args.command == "available_apps":
93
piston_reply = scaclient.available_apps(**kwargs)
95
LOG.exception("available_apps")
98
elif args.command == "available_apps_qa":
100
piston_reply = scaclient.available_apps_qa(**kwargs)
102
LOG.exception("available_apps_qa")
104
elif args.command == "subscriptions_for_me":
106
piston_reply = scaclient.subscriptions_for_me(complete_only=True)
107
# the new piston API send the data in a nasty format, most
108
# interessting stuff is in the "application" dict, move it
109
# back int othe main object here so that the parser understands it
110
for item in piston_reply:
111
for k, v in item.application.iteritems():
114
LOG.exception("subscriptions_for_me")
116
if args.command == "exhibits":
118
piston_reply = scaclient.exhibits(lang=args.lang, series=args.series)
120
LOG.exception("exhibits")
124
LOG.debug("reply: %s" % piston_reply)
125
for item in piston_reply:
126
for var in vars(item):
127
print "%s: %s" % (var, getattr(item, var))
131
# print to stdout where its consumed by the parent
132
if piston_reply is not None:
134
print pickle.dumps(piston_reply)
136
# this can happen if the parent gets killed, no need to trigger