author | Brock Pytlik <bpytlik@sun.com> |
Mon, 16 Aug 2010 16:48:50 -0700 | |
changeset 2026 | d1b30615bc99 |
parent 1968 | c0540b1e4f7e |
child 2028 | b2c674e6ee28 |
permissions | -rw-r--r-- |
1516
8c950a3b4171
10485 move pkg(5) to Python 2.6
Rich Burridge <rich.burridge@sun.com>
parents:
1265
diff
changeset
|
1 |
#!/usr/bin/python |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
2 |
# |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
3 |
# CDDL HEADER START |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
4 |
# |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
5 |
# The contents of this file are subject to the terms of the |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
6 |
# Common Development and Distribution License (the "License"). |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
7 |
# You may not use this file except in compliance with the License. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
8 |
# |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
10 |
# or http://www.opensolaris.org/os/licensing. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
11 |
# See the License for the specific language governing permissions |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
12 |
# and limitations under the License. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
13 |
# |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
19 |
# |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
20 |
# CDDL HEADER END |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
21 |
# |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
22 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
23 |
# |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1968
diff
changeset
|
24 |
# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
25 |
# |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
26 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
27 |
import os |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
28 |
import pkg.client.api_errors as api_errors |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
29 |
import pkg.client.publisher as publisher |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
30 |
import pkg.fmri as fmri |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
31 |
import simplejson as json |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
32 |
import urllib |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
33 |
import urllib2 |
1265
c700981b0af2
8656 build download hash check fails in Windows due to text mode open
Tom Mueller <Tom.Mueller@sun.com>
parents:
1253
diff
changeset
|
34 |
import urlparse |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
35 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
36 |
CURRENT_VERSION = 1 |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
37 |
MIME_TYPE = "application/vnd.pkg5.info" |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
38 |
|
1736
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
39 |
def parse(data=None, fileobj=None, location=None): |
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
40 |
"""Reads the pkg(5) publisher JSON formatted data at 'location' |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
41 |
or from the provided file-like object 'fileobj' and returns a |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
42 |
list of tuples of the format (publisher object, pkg_names). |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
43 |
pkg_names is a list of strings representing package names or |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
44 |
FMRIs. If any pkg_names not specific to a publisher were |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
45 |
provided, the last tuple returned will be of the format (None, |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
46 |
pkg_names). |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
47 |
|
1736
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
48 |
'data' is an optional string containing the p5i data. |
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
49 |
|
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
50 |
'fileobj' is an optional file-like object that must support a |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
51 |
'read' method for retrieving data. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
52 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
53 |
'location' is an optional string value that should either start |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
54 |
with a leading slash and be pathname of a file or a URI string. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
55 |
If it is a URI string, supported protocol schemes are 'file', |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
56 |
'ftp', 'http', and 'https'. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
57 |
|
1736
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
58 |
'data' or 'fileobj' or 'location' must be provided.""" |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
59 |
|
1736
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
60 |
if not data and not location and not fileobj: |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
61 |
raise api_errors.InvalidResourceLocation(location) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
62 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
63 |
if location: |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1795
diff
changeset
|
64 |
if location.find("://") == -1 and \ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1795
diff
changeset
|
65 |
not location.startswith("file:/"): |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
66 |
# Convert the file path to a URI. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
67 |
location = os.path.abspath(location) |
1265
c700981b0af2
8656 build download hash check fails in Windows due to text mode open
Tom Mueller <Tom.Mueller@sun.com>
parents:
1253
diff
changeset
|
68 |
location = urlparse.urlunparse(("file", "", |
c700981b0af2
8656 build download hash check fails in Windows due to text mode open
Tom Mueller <Tom.Mueller@sun.com>
parents:
1253
diff
changeset
|
69 |
urllib.pathname2url(location), "", "", "")) |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
70 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
71 |
try: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
72 |
fileobj = urllib2.urlopen(location) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
73 |
except (EnvironmentError, ValueError, |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
74 |
urllib2.HTTPError), e: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
75 |
raise api_errors.RetrievalError(e, |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
76 |
location=location) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
77 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
78 |
try: |
1736
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
79 |
if data: |
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
80 |
dump_struct = json.loads(data) |
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
81 |
else: |
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
82 |
dump_struct = json.load(fileobj) |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
83 |
except (EnvironmentError, urllib2.HTTPError), e: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
84 |
raise api_errors.RetrievalError(e) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
85 |
except ValueError, e: |
1736
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
86 |
# Not a valid JSON file. |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
87 |
raise api_errors.InvalidP5IFile(e) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
88 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
89 |
try: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
90 |
ver = int(dump_struct["version"]) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
91 |
except KeyError: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
92 |
raise api_errors.InvalidP5IFile(_("missing version")) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
93 |
except ValueError: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
94 |
raise api_errors.InvalidP5IFile(_("invalid version")) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
95 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
96 |
if ver > CURRENT_VERSION: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
97 |
raise api_errors.UnsupportedP5IFile() |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
98 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
99 |
result = [] |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
100 |
try: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
101 |
plist = dump_struct.get("publishers", []) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
102 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
103 |
for p in plist: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
104 |
alias = p.get("alias", None) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
105 |
prefix = p.get("name", None) |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1968
diff
changeset
|
106 |
signing_ca_certs = p.get("signing_ca_certs", []) |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1968
diff
changeset
|
107 |
inter_certs = p.get("intermediate_certs", []) |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1968
diff
changeset
|
108 |
|
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
109 |
if not prefix: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
110 |
prefix = "Unknown" |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
111 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1968
diff
changeset
|
112 |
pub = publisher.Publisher(prefix, alias=alias, |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1968
diff
changeset
|
113 |
ca_certs=signing_ca_certs, inter_certs=inter_certs) |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
114 |
pkglist = p.get("packages", []) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
115 |
result.append((pub, pkglist)) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
116 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
117 |
for r in p.get("repositories", []): |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
118 |
rargs = {} |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
119 |
for prop in ("collection_type", |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
120 |
"description", "name", |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
121 |
"refresh_seconds", |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
122 |
"registration_uri"): |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
123 |
val = r.get(prop, None) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
124 |
if val is None or val == "None": |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
125 |
continue |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
126 |
rargs[prop] = val |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
127 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
128 |
for prop in ("legal_uris", "mirrors", |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
129 |
"origins", "related_uris"): |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
130 |
val = r.get(prop, []) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
131 |
if not isinstance(val, list): |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
132 |
continue |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
133 |
rargs[prop] = val |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
134 |
|
1795
1b3bed835773
14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
135 |
repo = publisher.Repository(**rargs) |
1b3bed835773
14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
136 |
pub.add_repository(repo) |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
137 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
138 |
pkglist = dump_struct.get("packages", []) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
139 |
if pkglist: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
140 |
result.append((None, pkglist)) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
141 |
except (api_errors.PublisherError, TypeError, ValueError), e: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
142 |
raise api_errors.InvalidP5IFile(str(e)) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
143 |
return result |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
144 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
145 |
def write(fileobj, pubs, pkg_names=None): |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
146 |
"""Writes the publisher, repository, and provided package names to the |
1736
727dda1e7968
11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents:
1516
diff
changeset
|
147 |
provided file-like object 'fileobj' in JSON p5i format. |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
148 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
149 |
'fileobj' is an object that has a 'write' method that accepts data to be |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
150 |
written as a parameter. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
151 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
152 |
'pkg_names' is a dict of lists, tuples, or sets indexed by publisher |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
153 |
prefix that contain package names, FMRI strings, or FMRI objects. A |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
154 |
prefix of "" can be used for packages that are that are not specific to |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
155 |
a publisher. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
156 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
157 |
'pubs' is a list of Publisher objects.""" |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
158 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
159 |
dump_struct = { |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
160 |
"packages": [], |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
161 |
"publishers": [], |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
162 |
"version": CURRENT_VERSION, |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
163 |
} |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
164 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
165 |
if pkg_names is None: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
166 |
pkg_names = {} |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
167 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
168 |
def copy_pkg_names(source, dest): |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
169 |
for entry in source: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
170 |
# Publisher information is intentionally |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
171 |
# omitted as association with this specific |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
172 |
# publisher is implied by location in the |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
173 |
# output. |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
174 |
if isinstance(entry, fmri.PkgFmri): |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
175 |
dest.append(entry.get_fmri( |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
176 |
anarchy=True)) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
177 |
else: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
178 |
dest.append(str(entry)) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
179 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
180 |
dpubs = dump_struct["publishers"] |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
181 |
for p in pubs: |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1968
diff
changeset
|
182 |
|
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
183 |
dpub = { |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
184 |
"alias": p.alias, |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
185 |
"name": p.prefix, |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1968
diff
changeset
|
186 |
"signing_ca_certs": p.signing_ca_certs, |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1968
diff
changeset
|
187 |
"intermediate_certs": p.inter_certs, |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
188 |
"packages": [], |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
189 |
"repositories": [] |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
190 |
} |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
191 |
dpubs.append(dpub) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
192 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
193 |
try: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
194 |
copy_pkg_names(pkg_names[p.prefix], |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
195 |
dpub["packages"]) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
196 |
except KeyError: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
197 |
pass |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
198 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
199 |
drepos = dpub["repositories"] |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
200 |
for r in p.repositories: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
201 |
reg_uri = "" |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
202 |
if r.registration_uri: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
203 |
reg_uri = r.registration_uri.uri |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
204 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
205 |
drepos.append({ |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
206 |
"collection_type": r.collection_type, |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
207 |
"description": r.description, |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
208 |
"legal_uris": [u.uri for u in r.legal_uris], |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
209 |
"mirrors": [u.uri for u in r.mirrors], |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
210 |
"name": r.name, |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
211 |
"origins": [u.uri for u in r.origins], |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
212 |
"refresh_seconds": r.refresh_seconds, |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
213 |
"registration_uri": reg_uri, |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
214 |
"related_uris": [ |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
215 |
u.uri for u in r.related_uris |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
216 |
], |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
217 |
}) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
218 |
|
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
219 |
try: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
220 |
copy_pkg_names(pkg_names[""], dump_struct["packages"]) |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
221 |
except KeyError: |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
222 |
pass |
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
223 |
|
1253
6398a8499a91
9027 p5i module should add terminating newline
Shawn Walker <srw@sun.com>
parents:
1117
diff
changeset
|
224 |
json.dump(dump_struct, fileobj, ensure_ascii=False, |
1117
667aecade0ab
7862 install links using p5i for search results desired
Shawn Walker <srw@sun.com>
parents:
diff
changeset
|
225 |
allow_nan=False, indent=2, sort_keys=True) |
1253
6398a8499a91
9027 p5i module should add terminating newline
Shawn Walker <srw@sun.com>
parents:
1117
diff
changeset
|
226 |
fileobj.write("\n") |