Merge lp:~jml/libdep-service-python/v2-api into lp:libdep-service-python

Proposed by Jonathan Lange
Status: Merged
Approved by: James Westby
Approved revision: 9
Merged at revision: 8
Proposed branch: lp:~jml/libdep-service-python/v2-api
Merge into: lp:libdep-service-python
Diff against target: 173 lines (+44/-28)
3 files modified
libdep_service_client/client.py (+10/-7)
libdep_service_client/tests/test_client.py (+33/-20)
versions.cfg (+1/-1)
To merge this branch: bzr merge lp:~jml/libdep-service-python/v2-api
Reviewer Review Type Date Requested Status
James Westby (community) Approve
Review via email: mp+129925@code.launchpad.net

Commit message

Switch to v2 of the libdep-service API

Description of the change

Fairly straightforward branch that adds architecture support and uses the
new, improved test double.

To post a comment you must log in.
lp:~jml/libdep-service-python/v2-api updated
9. By Jonathan Lange

Merge trunk

Revision history for this message
James Westby (james-w) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'libdep_service_client/client.py'
2--- libdep_service_client/client.py 2012-10-11 15:24:35 +0000
3+++ libdep_service_client/client.py 2012-10-16 15:49:22 +0000
4@@ -15,21 +15,22 @@
5 "the server may be unavailable at this time: %s" % str(extra))
6
7
8-def make_query_string(libs):
9+def make_query_string(libs, architectures):
10 """Make the query string needed to ask for the binaries for all of `libs`.
11
12 :param libs: An iterable of names of libraries.
13 :return: the query string needed to request that libdep-service return
14 the binaries for the libraries in `libs`
15 """
16+ query_params = [('libs', lib) for lib in libs]
17+ query_params.extend([('arch', arch) for arch in architectures])
18 query_string = ''
19- query_params = [('libs', lib) for lib in libs]
20 if query_params:
21 query_string = '?' + urlencode(query_params)
22 return query_string
23
24
25-def make_url(base, libs):
26+def make_url(base, libs, architectures):
27 """Make the url for a get_binaries_for_libraries query.
28
29 :param base: the base url of the instance the request
30@@ -37,8 +38,8 @@
31 :param libs: an iterable of names of libraries to include in the query
32 :return: the url to request.
33 """
34- query_string = make_query_string(libs)
35- return base + '/v1/get_binaries_for_libraries' + query_string
36+ query_string = make_query_string(libs, architectures)
37+ return base + '/v2/get_binaries_for_libraries' + query_string
38
39
40 def do_request(url):
41@@ -83,15 +84,17 @@
42 """
43 self.base_url = base_url
44
45- def get_binaries_for_libraries(self, libs):
46+ def get_binaries_for_libraries(self, libs, architectures):
47 """Get the binary packages that contain `libs`.
48
49 :param libs: an iterable of library names.
50+ :param architectures: an iterable of architecture tags (e.g. 'i386',
51+ 'amd64')
52 :return: a dict mapping library name to a list of package names that
53 contain that library. If there were no packages found for a
54 library then it will be absent from the dict.
55 """
56- request_url = make_url(self.base_url, libs)
57+ request_url = make_url(self.base_url, libs, architectures)
58 return do_request(request_url)
59
60 @classmethod
61
62=== modified file 'libdep_service_client/tests/test_client.py'
63--- libdep_service_client/tests/test_client.py 2012-10-11 15:30:35 +0000
64+++ libdep_service_client/tests/test_client.py 2012-10-16 15:49:22 +0000
65@@ -15,29 +15,43 @@
66 class MakeQueryStringTests(TestCase):
67
68 def test_no_libs(self):
69- self.assertEqual('', client.make_query_string([]))
70+ self.assertEqual('', client.make_query_string([], []))
71
72 def test_one_lib(self):
73- self.assertEqual('?libs=libfoo.so.1',
74- client.make_query_string(['libfoo.so.1']))
75+ self.assertEqual(
76+ '?libs=libfoo.so.1',
77+ client.make_query_string(['libfoo.so.1'], []))
78
79 def test_two_libs(self):
80- self.assertEqual('?libs=libfoo.so.1&libs=libbar.so.1',
81- client.make_query_string(['libfoo.so.1', 'libbar.so.1']))
82+ self.assertEqual(
83+ '?libs=libfoo.so.1&libs=libbar.so.1',
84+ client.make_query_string(['libfoo.so.1', 'libbar.so.1'], []))
85+
86+ def test_with_arch(self):
87+ self.assertEqual(
88+ '?libs=libfoo.so.1&libs=libbar.so.1&arch=i386',
89+ client.make_query_string(['libfoo.so.1', 'libbar.so.1'], ['i386']))
90
91
92 class MakeURLTests(TestCase):
93
94 def test_inserts_api_path(self):
95 base = 'https://libdeps-service.example.com/foo'
96- self.assertEqual('{0}/v1/get_binaries_for_libraries'.format(base),
97- client.make_url(base, []))
98+ self.assertEqual('{0}/v2/get_binaries_for_libraries'.format(base),
99+ client.make_url(base, [], []))
100
101 def test_adds_query_string(self):
102 base = 'https://libdeps-service.example.com/foo'
103 self.assertEqual(
104- '{0}/v1/get_binaries_for_libraries?libs=libfoo.so.1'.format(base),
105- client.make_url(base, ['libfoo.so.1']))
106+ '{0}/v2/get_binaries_for_libraries?libs=libfoo.so.1'.format(base),
107+ client.make_url(base, ['libfoo.so.1'], []))
108+
109+ def test_adds_query_string_with_arch(self):
110+ base = 'https://libdeps-service.example.com/foo'
111+ query_string = 'v2/get_binaries_for_libraries?libs=libfoo.so.1&arch=i386'
112+ self.assertEqual(
113+ '{0}/{1}'.format(base, query_string),
114+ client.make_url(base, ['libfoo.so.1'], ['i386']))
115
116
117 class LookupAliasTests(TestCase):
118@@ -70,13 +84,9 @@
119
120 # This is implicit setup for the tests that share it, so keep
121 # the data small and the use of it minimal.
122-TEST_DATA = {
123- 'v1/service_check': [({}, 'Hello world!')],
124- 'v1/get_binaries_for_libraries': [
125- ({'libs': ['doesnotexist']}, '{}'),
126- ({'libs': ['libc.so.6']}, '{"libc.so.6": ["libc-bin"]}'),
127- ],
128-}
129+TEST_DATA = [('libc', {'i386': {'libc.so.6': 'libc-bin'},
130+ 'amd64': {'libc.so.6': 'libc-amd64'}})]
131+
132
133 test_double_fixture = FixtureResource(LibdepServiceDouble(TEST_DATA))
134
135@@ -89,18 +99,21 @@
136 def test_get_binaries_for_libraries_found(self):
137 lib = 'libc.so.6'
138 c = client.Client(self.double.base_url)
139- self.assertEqual({"libc.so.6": ["libc-bin"]},
140- c.get_binaries_for_libraries([lib]))
141+ self.assertEqual(
142+ {'i386': {"libc.so.6": ["libc-bin"]}},
143+ c.get_binaries_for_libraries([lib], ['i386']))
144
145 def test_get_binaries_for_libraries_missing(self):
146 lib = 'doesnotexist'
147 c = client.Client(self.double.base_url)
148- self.assertEqual({}, c.get_binaries_for_libraries([lib]))
149+ self.assertEqual(
150+ {'i386': {}}, c.get_binaries_for_libraries([lib], ['i386']))
151
152 def test_get_binaries_for_libraries_unheard(self):
153 lib = 'neverexisted'
154 c = client.Client(self.double.base_url)
155- self.assertEqual({}, c.get_binaries_for_libraries([lib]))
156+ self.assertEqual(
157+ {'i386': {}}, c.get_binaries_for_libraries([lib], ['i386']))
158
159
160 class ErrorTests(TestCase):
161
162=== modified file 'versions.cfg'
163--- versions.cfg 2012-10-11 15:24:35 +0000
164+++ versions.cfg 2012-10-16 15:49:22 +0000
165@@ -28,7 +28,7 @@
166 lazr.authentication = 0.1.2
167 lazr.restfulclient = 0.13.0
168 lazr.uri = 1.0.3
169-libdep-service = 0.1
170+libdep-service = 0.3
171 Markdown = 2.2.0
172 netlib = 0.2.1
173 oauth = 1.0.1

Subscribers

People subscribed via source and target branches