Shawn,
On 03/23/10 06:04 PM, Shawn Walker wrote:
On 03/23/10 11:50 AM, William Schumann wrote:
I have been experimenting with the pkg.client.api API to get the
expected disk usage for the installer, given a set of packages. There
are no examples in the documentation, which is in "pydoc
pkg.client.api", but I came up with this (some code removed):

api_inst = api.ImageInterface(img_dir, CLIENT_API_VERSION,
progresstracker, None, PKG_CLIENT_NAME)
api.image_create(PKG_CLIENT_NAME, CLIENT_API_VERSION, img_dir,
IMG_TYPE_ENTIRE, False,
repo_uri="http://ipkg.sfbay/dev";,
progtrack=progress.QuietProgressTracker(), mirrors = mirrors, force=True)

image_create() returns an ImageInterface object for the image that was created, so there's no reason for the first assignment line.

The first line you have would only be used if the image already existed, and the image_create() only if the image did not already exist.
Well, if I omit the ImageInterface call, this assertion results:
Traceback (most recent call last):
  File "/export/home/ws199450/api.py", line 75, in <module>
api_inst = api.image_create(PKG_CLIENT_NAME, CLIENT_API_VERSION, img_dir, IMG_TYPE_ENTIRE, False, repo_uri="http://ipkg.sfbay/dev";, progtrack=progress.QuietProgressTracker(), mirrors = mirrors, force=True) File "/usr/lib/python2.6/vendor-packages/pkg/client/api.py", line 2771, in image_create
    variants=variants)
File "/usr/lib/python2.6/vendor-packages/pkg/client/image.py", line 680, in create
    progtrack=progtrack)
File "/usr/lib/python2.6/vendor-packages/pkg/client/image.py", line 967, in add_publisher
    self.save_config()
  File "/usr/lib/python2.6/contextlib.py", line 23, in __exit__
    self.gen.next()
File "/usr/lib/python2.6/vendor-packages/pkg/client/image.py", line 286, in locked_op
    self.history.log_operation_end(error=error)
File "/usr/lib/python2.6/vendor-packages/pkg/client/history.py", line 702, in log_operation_end
    self.operation_result = result
File "/usr/lib/python2.6/vendor-packages/pkg/client/history.py", line 338, in __setattr__
    self.__save()
File "/usr/lib/python2.6/vendor-packages/pkg/client/history.py", line 562, in __save
    self.__serialize_client_data(d)
File "/usr/lib/python2.6/vendor-packages/pkg/client/history.py", line 490, in __serialize_client_data
    assert self.client_name is not None
AssertionError

Updated code:
api.ImageInterface(img_dir, CLIENT_API_VERSION, progresstracker, None, PKG_CLIENT_NAME) api_inst = api.image_create(PKG_CLIENT_NAME, CLIENT_API_VERSION, img_dir, IMG_TYPE_ENTIRE, False, repo_uri="http://ipkg.sfbay/dev";, progtrack=progress.QuietProgressTracker(), mirrors = mirrors, force=True) api_inst.plan_install(pkglist,refresh_catalogs=True,noexecute=False,verbose=True, update_index=True)
plan = api_inst.describe()
new_pkg_list = [dest.fmri for src, dest in plan.get_changes()]
ret = api_inst.info(new_pkg_list, False, frozenset([api.PackageInfo.SIZE]))
pis = ret[api.ImageInterface.INFO_FOUND]
size = 0;
for i, pi in enumerate(pis):
    size = size + pi.size

Also, how is "pkg_client_name" used?  What should it be?
Thanks,
William
_______________________________________________
pkg-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/pkg-discuss

Reply via email to