Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
Already on GitHub? Sign in to your account
Integrate with new remote parts #590
Merged
sergiusens
merged 13 commits into
snapcore:master
from
sergiusens:feature/1594976/wiki-replacement
Jun 24, 2016
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
6107ded
Integrate with the new remote parts
sergiusens 2ee799e
Update the downloader wiki test
sergiusens 35b0a55
Update docstrings
sergiusens f9beb7b
Add a nicer error message for missing remote parts
sergiusens 63edf35
Bringing back the old wiki to my own detriment
sergiusens dc44746
meh
sergiusens 07d8726
Revert "meh"
sergiusens 163e1f1
Revert "Bringing back the old wiki to my own detriment"
sergiusens 2a32f39
Use new wiki entry
sergiusens 7f08e83
oh meld..
sergiusens 633852a
Update tests and error logic
sergiusens 14e1cec
grammar
sergiusens 490ac01
Merge branch 'master' into feature/1594976/wiki-replacement
sergiusens
Jump to file or symbol
Failed to load files and symbols.
| @@ -1,71 +0,0 @@ | ||
| -# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*- | ||
| -# | ||
| -# Copyright (C) 2015 Canonical Ltd | ||
| -# | ||
| -# This program is free software: you can redistribute it and/or modify | ||
| -# it under the terms of the GNU General Public License version 3 as | ||
| -# published by the Free Software Foundation. | ||
| -# | ||
| -# This program is distributed in the hope that it will be useful, | ||
| -# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| -# GNU General Public License for more details. | ||
| -# | ||
| -# You should have received a copy of the GNU General Public License | ||
| -# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| - | ||
| -import logging | ||
| -import requests | ||
| -import yaml | ||
| - | ||
| -PARTS_URI = 'https://wiki.ubuntu.com/Snappy/Parts' | ||
| -PARTS_URI_PARAMS = {'action': 'raw'} | ||
| - | ||
| -_WIKI_OPEN = '{{{' | ||
| -_WIKI_CLOSE = '}}}' | ||
| - | ||
| -logging.getLogger("urllib3").setLevel(logging.CRITICAL) | ||
| - | ||
| - | ||
| -class Wiki: | ||
| - wiki_parts = None | ||
| - | ||
| - def _fetch(self): | ||
| - if self.wiki_parts is None: | ||
| - raw_content = requests.get(PARTS_URI, params=PARTS_URI_PARAMS) | ||
| - content = raw_content.text.strip() | ||
| - | ||
| - if content.startswith(_WIKI_OPEN): | ||
| - content = content[len(_WIKI_OPEN):].strip() | ||
| - if content.endswith(_WIKI_CLOSE): | ||
| - content = content[:-len(_WIKI_CLOSE)] | ||
| - | ||
| - self.wiki_parts = yaml.load(content) | ||
| - | ||
| - def get_part(self, name): | ||
| - self._fetch() | ||
| - | ||
| - if name in self.wiki_parts: | ||
| - if 'plugin' and 'type' in self.wiki_parts[name]: | ||
| - del self.wiki_parts[name]['type'] | ||
| - return self.wiki_parts[name] | ||
| - | ||
| - def compose(self, name, properties): | ||
| - """Return properties composed with the ones from part name in the wiki. | ||
| - | ||
| - :param str name: The name of the part to query from the wiki | ||
| - :param dict properties: The current set of properties | ||
| - :return: Part properties from the wiki composed with the properties | ||
| - passed as a parameter. If there is no wiki part named name, | ||
| - properties will be returned. | ||
| - :rtype: dict | ||
| - :raises KeyError: if the part named name is not found in the wiki. | ||
| - """ | ||
| - self._fetch() | ||
| - | ||
| - wiki_properties = self.wiki_parts[name] | ||
| - for key in wiki_properties: | ||
| - properties[key] = properties.get(key, wiki_properties[key]) | ||
| - properties['plugin'] = wiki_properties.get('plugin', None) | ||
| - | ||
| - return properties |
| @@ -1,76 +0,0 @@ | ||
| -# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*- | ||
| -# | ||
| -# Copyright (C) 2015 Canonical Ltd | ||
| -# | ||
| -# This program is free software: you can redistribute it and/or modify | ||
| -# it under the terms of the GNU General Public License version 3 as | ||
| -# published by the Free Software Foundation. | ||
| -# | ||
| -# This program is distributed in the hope that it will be useful, | ||
| -# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| -# GNU General Public License for more details. | ||
| -# | ||
| -# You should have received a copy of the GNU General Public License | ||
| -# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| - | ||
| -import unittest.mock | ||
| - | ||
| -from snapcraft.internal import wiki | ||
| - | ||
| -from snapcraft.tests import TestCase | ||
| - | ||
| - | ||
| -class TestYaml(TestCase): | ||
| - | ||
| - def setUp(self): | ||
| - super().setUp() | ||
| - | ||
| - class Content: | ||
| - | ||
| - @property | ||
| - def text(self): | ||
| - return '''{{{part-in-wiki: | ||
| - plugin: go | ||
| - source: http://somesource | ||
| -}}}''' | ||
| - | ||
| - patcher = unittest.mock.patch('requests.get') | ||
| - self.mock_requests = patcher.start() | ||
| - self.mock_requests.return_value = Content() | ||
| - self.addCleanup(patcher.stop) | ||
| - | ||
| - self.w = wiki.Wiki() | ||
| - | ||
| - def tearDown(self): | ||
| - self.mock_requests.assert_called_once_with( | ||
| - 'https://wiki.ubuntu.com/Snappy/Parts', | ||
| - params={'action': 'raw'}) | ||
| - | ||
| - def test_get_part(self): | ||
| - self.assertEqual(self.w.get_part('part-in-wiki'), { | ||
| - 'plugin': 'go', 'source': 'http://somesource'}) | ||
| - self.assertEqual(self.w.get_part('part-not-in-wiki'), None) | ||
| - | ||
| - def test_compose_part_with_properties_from_the_wiki(self): | ||
| - properties = self.w.compose( | ||
| - 'part-in-wiki', {'source': '.', 'another': 'different'}) | ||
| - expected_properties = { | ||
| - 'plugin': 'go', 'source': '.', 'another': 'different'} | ||
| - | ||
| - self.assertEqual(properties, expected_properties) | ||
| - | ||
| - def test_compose_part_with_properties_from_the_wiki_using_source(self): | ||
| - properties = self.w.compose( | ||
| - 'part-in-wiki', {'another': 'different'}) | ||
| - expected_properties = { | ||
| - 'plugin': 'go', 'source': 'http://somesource', | ||
| - 'another': 'different'} | ||
| - | ||
| - self.assertEqual(properties, expected_properties) | ||
| - | ||
| - def test_compose_part_for_part_not_in_wiki_raises_exception(self): | ||
| - with self.assertRaises(KeyError) as raised: | ||
| - self.w.compose('part-not-in-wiki', | ||
| - {'source': '.', 'another': 'different'}) | ||
| - self.assertEqual(raised.exception.args, ('part-not-in-wiki',)) |
Oops, something went wrong.