<feed xmlns='http://www.w3.org/2005/Atom'>
<title>delta/openstack/python-openstackclient.git/openstackclient/tests/common, branch 2.4.0</title>
<subtitle>opendev.org: openstack/python-openstackclient
</subtitle>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/'/>
<entry>
<title>Propagate AttributeErrors when lazily loading plugins</title>
<updated>2016-04-15T04:12:35+00:00</updated>
<author>
<name>Tim Burke</name>
<email>tim.burke@gmail.com</email>
</author>
<published>2016-04-14T21:18:16+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/commit/?id=926330d3726e9ce7001190730c69bf6ee45b422a'/>
<id>926330d3726e9ce7001190730c69bf6ee45b422a</id>
<content type='text'>
Previously, if an AttributeError was raised in a plugin's make_client
method, the plugin simply wouldn't be an attribute of the ClientManager,
producing tracebacks like

Traceback (most recent call last):
  File ".../openstackclient/shell.py", line 118, in run
    ret_val = super(OpenStackShell, self).run(argv)

  ...

  File ".../openstackclient/object/v1/container.py", line 150, in take_action
    data = self.app.client_manager.object_store.container_list(
  File ".../openstackclient/common/clientmanager.py", line 66, in __getattr__
    raise AttributeError(name)
AttributeError: object_store

This made writing minimal third-party auth plugins difficult, as it
obliterated the original AttributeError.

Now, AttributeErrors that are raised during plugin initialization will
be re-raised as PluginAttributeErrors, and the original traceback will
be preserved. This gives much more useful information to plugin
developers, as in

Traceback (most recent call last):
  File ".../openstackclient/shell.py", line 118, in run
    ret_val = super(OpenStackShell, self).run(argv)

  ...

  File ".../openstackclient/object/v1/container.py", line 150, in take_action
    data = self.app.client_manager.object_store.container_list(
  File ".../openstackclient/common/clientmanager.py", line 57, in __get__
    err_val, err_tb)
  File ".../openstackclient/common/clientmanager.py", line 51, in __get__
    self._handle = self.factory(instance)
  File ".../openstackclient/object/client.py", line 35, in make_client
    interface=instance._interface,
  File ".../openstackclient/common/clientmanager.py", line 258,
  in get_endpoint_for_service_type
    endpoint = self.auth_ref.service_catalog.url_for(
PluginAttributeError: 'NoneType' object has no attribute 'url_for'

Change-Id: I0eee7eba6eccc6d471a699a381185c4e76da10bd
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, if an AttributeError was raised in a plugin's make_client
method, the plugin simply wouldn't be an attribute of the ClientManager,
producing tracebacks like

Traceback (most recent call last):
  File ".../openstackclient/shell.py", line 118, in run
    ret_val = super(OpenStackShell, self).run(argv)

  ...

  File ".../openstackclient/object/v1/container.py", line 150, in take_action
    data = self.app.client_manager.object_store.container_list(
  File ".../openstackclient/common/clientmanager.py", line 66, in __getattr__
    raise AttributeError(name)
AttributeError: object_store

This made writing minimal third-party auth plugins difficult, as it
obliterated the original AttributeError.

Now, AttributeErrors that are raised during plugin initialization will
be re-raised as PluginAttributeErrors, and the original traceback will
be preserved. This gives much more useful information to plugin
developers, as in

Traceback (most recent call last):
  File ".../openstackclient/shell.py", line 118, in run
    ret_val = super(OpenStackShell, self).run(argv)

  ...

  File ".../openstackclient/object/v1/container.py", line 150, in take_action
    data = self.app.client_manager.object_store.container_list(
  File ".../openstackclient/common/clientmanager.py", line 57, in __get__
    err_val, err_tb)
  File ".../openstackclient/common/clientmanager.py", line 51, in __get__
    self._handle = self.factory(instance)
  File ".../openstackclient/object/client.py", line 35, in make_client
    interface=instance._interface,
  File ".../openstackclient/common/clientmanager.py", line 258,
  in get_endpoint_for_service_type
    endpoint = self.auth_ref.service_catalog.url_for(
PluginAttributeError: 'NoneType' object has no attribute 'url_for'

Change-Id: I0eee7eba6eccc6d471a699a381185c4e76da10bd
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge "Support client certificate/key"</title>
<updated>2016-04-06T21:42:56+00:00</updated>
<author>
<name>Jenkins</name>
<email>jenkins@review.openstack.org</email>
</author>
<published>2016-04-06T21:42:56+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/commit/?id=0edab95fd1989dcc06a166a820b115a75dd17d54'/>
<id>0edab95fd1989dcc06a166a820b115a75dd17d54</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Support client certificate/key</title>
<updated>2016-04-06T18:21:19+00:00</updated>
<author>
<name>Cedric Brandily</name>
<email>zzelle@gmail.com</email>
</author>
<published>2016-04-01T21:42:27+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/commit/?id=3a8320a1d73444b3bb823300e94c3e2ee85fd6ef'/>
<id>3a8320a1d73444b3bb823300e94c3e2ee85fd6ef</id>
<content type='text'>
This change enables to specify a client certificate/key with:
 * usual CLI options (--os-cert/--os-key)
 * usual environment variables ($OS_CERT/$OS_KEY)
 * os-client-config

Change-Id: Ibeaaa5897ae37b37c1e91f3e47076e4e8e4a8ded
Closes-Bug: #1565112
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This change enables to specify a client certificate/key with:
 * usual CLI options (--os-cert/--os-key)
 * usual environment variables ($OS_CERT/$OS_KEY)
 * os-client-config

Change-Id: Ibeaaa5897ae37b37c1e91f3e47076e4e8e4a8ded
Closes-Bug: #1565112
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't mask authorization errors</title>
<updated>2016-04-01T20:44:33+00:00</updated>
<author>
<name>Hidekazu Nakamura</name>
<email>hid-nakamura@vf.jp.nec.com</email>
</author>
<published>2015-11-05T15:47:38+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/commit/?id=55b37d5e33f322077303a895d3453320b3895f11'/>
<id>55b37d5e33f322077303a895d3453320b3895f11</id>
<content type='text'>
Project show with name argument returns 'Could not find resource'
error when the user is not authorized. It should report the
authorization error instead. This patch makes that change.

Change-Id: Iac3521f8a411060b0ec9ef46c8f0e1f3551e56ae
Closes-Bug: #1511625
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Project show with name argument returns 'Could not find resource'
error when the user is not authorized. It should report the
authorization error instead. This patch makes that change.

Change-Id: Iac3521f8a411060b0ec9ef46c8f0e1f3551e56ae
Closes-Bug: #1511625
</pre>
</div>
</content>
</entry>
<entry>
<title>Use assertItemsEqual() instead of assertListEqual()</title>
<updated>2016-03-14T08:22:24+00:00</updated>
<author>
<name>Tang Chen</name>
<email>chen.tang@easystack.cn</email>
</author>
<published>2016-03-14T08:22:24+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/commit/?id=7b2e3c7d1cbe6e55de4bf1d51cb4cc0862c60d44'/>
<id>7b2e3c7d1cbe6e55de4bf1d51cb4cc0862c60d44</id>
<content type='text'>
assertListEqual() is order sensitive. So we need to sort
the lists before we compare them. Use assertItemsEqual()
instead is better.

Change-Id: I9eaa98716c7401f5b099b007438acc916dae619b
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
assertListEqual() is order sensitive. So we need to sort
the lists before we compare them. Use assertItemsEqual()
instead is better.

Change-Id: I9eaa98716c7401f5b099b007438acc916dae619b
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge "Fixed command list"</title>
<updated>2016-03-11T20:48:32+00:00</updated>
<author>
<name>Jenkins</name>
<email>jenkins@review.openstack.org</email>
</author>
<published>2016-03-11T20:48:32+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/commit/?id=586a038afd26894b264bd716186ff1b9ad8844f9'/>
<id>586a038afd26894b264bd716186ff1b9ad8844f9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Enhance list extension unit test</title>
<updated>2016-03-11T02:39:15+00:00</updated>
<author>
<name>Fang Zhen</name>
<email>zhen.fang@easystack.cn</email>
</author>
<published>2016-03-10T10:51:22+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/commit/?id=4208f02a20af6d7561bd925406893b261a5fbbe1'/>
<id>4208f02a20af6d7561bd925406893b261a5fbbe1</id>
<content type='text'>
Extension list involves identity, compute, volume and network.
Current test covers only identity and network. This patch added test
against compute and volum. Also refactored current implentation.

Change-Id: If9b36cba24c50a817a17f685801e418fb898596a
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Extension list involves identity, compute, volume and network.
Current test covers only identity and network. This patch added test
against compute and volum. Also refactored current implentation.

Change-Id: If9b36cba24c50a817a17f685801e418fb898596a
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed command list</title>
<updated>2016-03-09T16:00:39+00:00</updated>
<author>
<name>Brandon Palm</name>
<email>bapalm@us.ibm.com</email>
</author>
<published>2016-02-17T20:01:23+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/commit/?id=f0c3b4e69dc56934305442b505d5f5f68579f1f2'/>
<id>f0c3b4e69dc56934305442b505d5f5f68579f1f2</id>
<content type='text'>
The cliff module expects an array of tuples however
the array that this function was returning was an array
of tuples that was also containing an array of values for
the commands attached to each group and the
cliff module wasn't liking it.

The output now comes out looking like:

| openstack.common | limits show |
|                  | extension list |
| openstack.baremetal.v1 | baremetal set |

Change-Id: Ifa1c149cb5c66ba27dc72bf72d7c8f2f50e42f73
Closes-Bug: 1545609
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The cliff module expects an array of tuples however
the array that this function was returning was an array
of tuples that was also containing an array of values for
the commands attached to each group and the
cliff module wasn't liking it.

The output now comes out looking like:

| openstack.common | limits show |
|                  | extension list |
| openstack.baremetal.v1 | baremetal set |

Change-Id: Ifa1c149cb5c66ba27dc72bf72d7c8f2f50e42f73
Closes-Bug: 1545609
</pre>
</div>
</content>
</entry>
<entry>
<title>Add MultiKeyValueAction to custom parser action</title>
<updated>2016-02-26T19:53:32+00:00</updated>
<author>
<name>Tang Chen</name>
<email>chen.tang@easystack.cn</email>
</author>
<published>2016-02-24T06:56:35+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/commit/?id=ada06f4dc3df39db5e739ebd8d82ccd734a54a93'/>
<id>ada06f4dc3df39db5e739ebd8d82ccd734a54a93</id>
<content type='text'>
Class MultiKeyValueAction will be used to parse arguments like this:

--route destination=xxx,gateway=xxx --route destination=yyy,gateway=yyy

The result is a list like this:

[{destination:xxx, gateway:xxx}, {destination:yyy, gateway:yyy}]

This action also contain validation of the parameters.

Change-Id: Ie3aa8635c6a13fc2e429fe6922acd681dc7244cf
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Class MultiKeyValueAction will be used to parse arguments like this:

--route destination=xxx,gateway=xxx --route destination=yyy,gateway=yyy

The result is a list like this:

[{destination:xxx, gateway:xxx}, {destination:yyy, gateway:yyy}]

This action also contain validation of the parameters.

Change-Id: Ie3aa8635c6a13fc2e429fe6922acd681dc7244cf
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed a bunch of spacing</title>
<updated>2016-02-23T16:38:58+00:00</updated>
<author>
<name>Brandon Palm</name>
<email>bapalm@us.ibm.com</email>
</author>
<published>2016-02-23T16:38:58+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/openstack/python-openstackclient.git/commit/?id=f49f0fead2933ace4cb85c70bd14d13d0c479e6a'/>
<id>f49f0fead2933ace4cb85c70bd14d13d0c479e6a</id>
<content type='text'>
Nothing too complicated here.  I fixed a bunch of spacing issues
that I saw in OSC.

Change-Id: I935ab48e7c5bac5f88ecdb3a05f73fb44fc9f41d
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Nothing too complicated here.  I fixed a bunch of spacing issues
that I saw in OSC.

Change-Id: I935ab48e7c5bac5f88ecdb3a05f73fb44fc9f41d
</pre>
</div>
</content>
</entry>
</feed>
