bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 2550.2.2
by Robert Collins Add helpers to get api versions from objects. | 1 | # Copyright (C) 2007 Canonical Ltd
 | 
| 2 | #
 | |
| 3 | # This program is free software; you can redistribute it and/or modify
 | |
| 4 | # it under the terms of the GNU General Public License as published by
 | |
| 5 | # the Free Software Foundation; either version 2 of the License, or
 | |
| 6 | # (at your option) any later version.
 | |
| 7 | #
 | |
| 8 | # This program is distributed in the hope that it will be useful,
 | |
| 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| 11 | # GNU General Public License for more details.
 | |
| 12 | #
 | |
| 13 | # You should have received a copy of the GNU General Public License
 | |
| 14 | # along with this program; if not, write to the Free Software
 | |
| 15 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
| 16 | ||
| 2550.2.3
by Robert Collins Add require_api API. | 17 | """Library API versioning support.
 | 
| 18 | ||
| 19 | Added in bzrlib 0.18 this allows export of compatibility information about
 | |
| 20 | bzrlib. Please see doc/developers/api-versioning.txt for design details and
 | |
| 21 | examples.
 | |
| 22 | """
 | |
| 2550.2.2
by Robert Collins Add helpers to get api versions from objects. | 23 | |
| 24 | import bzrlib | |
| 25 | from bzrlib.lazy_import import lazy_import | |
| 26 | lazy_import(globals(), """ | |
| 27 | from bzrlib.errors import IncompatibleAPI
 | |
| 28 | """) | |
| 29 | ||
| 30 | ||
| 31 | def get_current_api_version(object_with_api): | |
| 32 | """Return the API version tuple for object_with_api. | |
| 33 | ||
| 34 |     :param object_with_api: An object to look for an API version on. If the
 | |
| 35 |         object has a api_current_version attribute, that is used. Otherwise if
 | |
| 36 |         there is a version_info attribute, its first three elements are used.
 | |
| 37 |         Finally if there was no version_info attribute, the current api version
 | |
| 38 |         of bzrlib itself is used.
 | |
| 2550.2.3
by Robert Collins Add require_api API. | 39 | |
| 40 |     Added in bzrlib 0.18.
 | |
| 2550.2.2
by Robert Collins Add helpers to get api versions from objects. | 41 |     """
 | 
| 42 | try: | |
| 43 | return object_with_api.api_current_version | |
| 44 | except AttributeError: | |
| 45 | try: | |
| 46 | return object_with_api.version_info[0:3] | |
| 47 | except AttributeError: | |
| 48 | return get_current_api_version(bzrlib) | |
| 49 | ||
| 50 | ||
| 51 | def get_minimum_api_version(object_with_api): | |
| 52 | """Return the minimum API version supported by object_with_api. | |
| 53 | ||
| 54 |     :param object_with_api: An object to look for an API version on. If the
 | |
| 55 |         object has a api_minimum_version attribute, that is used. Otherwise the
 | |
| 56 |         minimum api version of bzrlib itself is used.
 | |
| 2550.2.3
by Robert Collins Add require_api API. | 57 | |
| 58 |     Added in bzrlib 0.18.
 | |
| 2550.2.2
by Robert Collins Add helpers to get api versions from objects. | 59 |     """
 | 
| 60 | try: | |
| 61 | return object_with_api.api_minimum_version | |
| 62 | except AttributeError: | |
| 63 | return get_minimum_api_version(bzrlib) | |
| 2550.2.3
by Robert Collins Add require_api API. | 64 | |
| 65 | ||
| 66 | def require_api(object_with_api, wanted_api): | |
| 67 | """Check if object_with_api supports the api version wanted_api. | |
| 68 | ||
| 69 |     :param object_with_api: An object which exports an API minimum and current
 | |
| 70 |         version. See get_minimum_api_version and get_current_api_version for
 | |
| 71 |         details.
 | |
| 72 |     :param wanted_api: The API version for which support is required.
 | |
| 73 |     :return None:
 | |
| 74 |     :raises IncompatibleAPI: When the wanted_api is not supported by
 | |
| 75 |         object_with_api.
 | |
| 76 | ||
| 77 |     Added in bzrlib 0.18.
 | |
| 78 |     """
 | |
| 79 | current = get_current_api_version(object_with_api) | |
| 80 | minimum = get_minimum_api_version(object_with_api) | |
| 81 | if wanted_api < minimum or wanted_api > current: | |
| 82 | raise IncompatibleAPI(object_with_api, wanted_api, minimum, current) |