Size: 1121
Comment:
|
Size: 5604
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 7: | Line 7: |
If this duplicates [[API/launchpadlib|launchpadlib]] too much, then please merge the two pages. | If this duplicates [[API/launchpadlib|launchpadlib]] or [[API/Uses]] too much, then please merge or edit pages as needed. == Find out if your launchpadlib version is recent enough (>= 1.5.1) == {{{ import launchpadlib print launchpadlib.__version__ }}} '''1.5.1''' or above is the answer you're looking for; almost all subsequent examples assume you have at least that recent a launchpadlib. |
Line 14: | Line 23: |
#!python from launchpadlib.launchpad import Launchpad, LPNET_SERVICE_ROOT launchpad = Launchpad.login_with( 'hello-world', LPNET_SERVICE_ROOT, '/tmp/launchpad-cache') print 'Hello, %s!' % launchpad.me.display_name |
from launchpadlib.launchpad import Launchpad, EDGE_SERVICE_ROOT launchpad = Launchpad.login_with( 'hello-world', EDGE_SERVICE_ROOT) print 'Hello, %s!' % launchpad.me.display_name |
Line 21: | Line 29: |
The `hello-world` bit is the name of the application, `LPNET_SERVICE_ROOT` means connect to the production server and `/tmp/launchpad-cache` is a path to a cache where launchpadlib keeps all of its objects. You generally want the cache to be somewhere in the running user's home directory. | The `hello-world` bit is the name of the application and EDGE_SERVICE_ROOT means connect to the edge server. == Does a bug have a release target? == {{{ from launchpadlib.launchpad import Launchpad, EDGE_SERVICE_ROOT def has_target(bug, series): series_url = str(series) for task in bug.bug_tasks: if str(task).startswith(series_url): return True return False launchpad = Launchpad.login_with( 'hello-world', EDGE_SERVICE_ROOT) b = launchpad.bugs[324614] ubuntu = launchpad.distributions["ubuntu"] jaunty = ubuntu.getSeries(name_or_version="jaunty") has_target(b, jaunty) ### ==> should evalute to True }}} == Listing the current package versions in a particular distroseries == {{{ from launchpadlib.launchpad import Launchpad, EDGE_SERVICE_ROOT launchpad = Launchpad.login_with( 'hello-world', EDGE_SERVICE_ROOT) ubuntu = launchpad.distributions["ubuntu"] archive = ubuntu.main_archive series = ubuntu.current_series archive.getPublishedSources(exact_match=True, source_name="apport", distro_series=series)[0].source_package_version ### ==> should return u'0.123' }}} == Get dsc-files for sources in an archive == {{{ import re import urlparse ### See previous examples for how to get an archive. def create_webroot_url_from_self_link(self_link): scheme, netloc, _, _, _ = urlparse.urlsplit(self_link) netloc = netloc.lstrip("api.") return u"%s://%s/" %(scheme, netloc) def get_dsc(archive): re_version = re.compile(r"^\d+\:") x = archive.getPublishedSources() webroot = create_webroot_url_from_self_link(archive.self_link) for i in x: version = i.source_package_version version = re_version.sub("", version, 1) yield "%s~%s/+archive/+files/%s_%s.dsc" \ %(webroot, archive.owner.name, i.source_package_name, version) }}} == Cache Launchpad credentials per application == ''This one is for older launchpadlibs. If you are using a current version, just replace the code below with `Launchpad.login_with`.'' From <https://launchpad.net/hydrazine> - use your own application name. {{{ def create_session(): lplib_cachedir = os.path.expanduser("~/.cache/launchpadlib/") hydrazine_cachedir = os.path.expanduser("~/.cache/hydrazine/") rrd_dir = os.path.expanduser("~/.cache/hydrazine/rrd") for d in [lplib_cachedir, hydrazine_cachedir, rrd_dir]: if not os.path.isdir(d): os.makedirs(d, mode=0700) hydrazine_credentials_filename = os.path.join(hydrazine_cachedir, 'credentials') if os.path.exists(hydrazine_credentials_filename): credentials = Credentials() credentials.load(file( os.path.expanduser("~/.cache/hydrazine/credentials"), "r")) trace('loaded existing credentials') return Launchpad(credentials, service_root, lplib_cachedir) # TODO: handle the case of having credentials that have expired etc else: launchpad = Launchpad.get_token_and_login( 'Hydrazine', service_root, lplib_cachedir) trace('saving credentials...') launchpad.credentials.save(file( hydrazine_credentials_filename, "w")) return launchpad }}} == Get date a user joined a team == This is an example of using team_membership details {{{ def get_join_date(team, user): team = launchpad.people[team] members = team.members_details for member in members: if member.member.name == user: return member.date_joined return None print get_join_date("zeitgeist", "thekorn") ### ==> should return a datetime.datetime object like 2009-06-14 18:01:10.511369+00:00 }}} == Get a useful error message from launchpadlib == Because launchpadlib is just a simple wrapper for an HTTP API, when the Launchpad server raises an error, this appears on the client side as an HTTP error. However, there is useful information to be had! {{{ #!python try: do_something_errorful() except HTTPError, e: # e.content has the actual Launchpad error. print e.content }}} |
Launchpad Help > API > Examples
This page has a bunch of examples of how to use launchpadlib and the Python APIs. Think of it like a cookbook that you can add your favourite recipe to.
If this duplicates launchpadlib or API/Uses too much, then please merge or edit pages as needed.
Find out if your launchpadlib version is recent enough (>= 1.5.1)
import launchpadlib print launchpadlib.__version__
1.5.1 or above is the answer you're looking for; almost all subsequent examples assume you have at least that recent a launchpadlib.
Hello Launchpad!
Ever wanted to have Launchpad greet you by your own name? Now you can, in the comfort of your own home.
from launchpadlib.launchpad import Launchpad, EDGE_SERVICE_ROOT launchpad = Launchpad.login_with( 'hello-world', EDGE_SERVICE_ROOT) print 'Hello, %s!' % launchpad.me.display_name
The hello-world bit is the name of the application and EDGE_SERVICE_ROOT means connect to the edge server.
Does a bug have a release target?
from launchpadlib.launchpad import Launchpad, EDGE_SERVICE_ROOT def has_target(bug, series): series_url = str(series) for task in bug.bug_tasks: if str(task).startswith(series_url): return True return False launchpad = Launchpad.login_with( 'hello-world', EDGE_SERVICE_ROOT) b = launchpad.bugs[324614] ubuntu = launchpad.distributions["ubuntu"] jaunty = ubuntu.getSeries(name_or_version="jaunty") has_target(b, jaunty) ### ==> should evalute to True
Listing the current package versions in a particular distroseries
from launchpadlib.launchpad import Launchpad, EDGE_SERVICE_ROOT launchpad = Launchpad.login_with( 'hello-world', EDGE_SERVICE_ROOT) ubuntu = launchpad.distributions["ubuntu"] archive = ubuntu.main_archive series = ubuntu.current_series archive.getPublishedSources(exact_match=True, source_name="apport", distro_series=series)[0].source_package_version ### ==> should return u'0.123'
Get dsc-files for sources in an archive
import re import urlparse ### See previous examples for how to get an archive. def create_webroot_url_from_self_link(self_link): scheme, netloc, _, _, _ = urlparse.urlsplit(self_link) netloc = netloc.lstrip("api.") return u"%s://%s/" %(scheme, netloc) def get_dsc(archive): re_version = re.compile(r"^\d+\:") x = archive.getPublishedSources() webroot = create_webroot_url_from_self_link(archive.self_link) for i in x: version = i.source_package_version version = re_version.sub("", version, 1) yield "%s~%s/+archive/+files/%s_%s.dsc" \ %(webroot, archive.owner.name, i.source_package_name, version)
Cache Launchpad credentials per application
This one is for older launchpadlibs. If you are using a current version, just replace the code below with Launchpad.login_with.
From <https://launchpad.net/hydrazine> - use your own application name.
def create_session(): lplib_cachedir = os.path.expanduser("~/.cache/launchpadlib/") hydrazine_cachedir = os.path.expanduser("~/.cache/hydrazine/") rrd_dir = os.path.expanduser("~/.cache/hydrazine/rrd") for d in [lplib_cachedir, hydrazine_cachedir, rrd_dir]: if not os.path.isdir(d): os.makedirs(d, mode=0700) hydrazine_credentials_filename = os.path.join(hydrazine_cachedir, 'credentials') if os.path.exists(hydrazine_credentials_filename): credentials = Credentials() credentials.load(file( os.path.expanduser("~/.cache/hydrazine/credentials"), "r")) trace('loaded existing credentials') return Launchpad(credentials, service_root, lplib_cachedir) # TODO: handle the case of having credentials that have expired etc else: launchpad = Launchpad.get_token_and_login( 'Hydrazine', service_root, lplib_cachedir) trace('saving credentials...') launchpad.credentials.save(file( hydrazine_credentials_filename, "w")) return launchpad
Get date a user joined a team
This is an example of using team_membership details
def get_join_date(team, user): team = launchpad.people[team] members = team.members_details for member in members: if member.member.name == user: return member.date_joined return None print get_join_date("zeitgeist", "thekorn") ### ==> should return a datetime.datetime object like 2009-06-14 18:01:10.511369+00:00
Get a useful error message from launchpadlib
Because launchpadlib is just a simple wrapper for an HTTP API, when the Launchpad server raises an error, this appears on the client side as an HTTP error. However, there is useful information to be had!