def setUp(self, mock_driver): if 'CABU_SETTINGS' in os.environ: del os.environ['CABU_SETTINGS'] os.environ['CABU_SETTINGS'] = 'cabu.tests.test_settings' self.app = Cabu(__name__) self.config = self.app.config self.vdisplay = self.app.vdisplay self.client = self.app.test_client()
class TestBase(unittest.TestCase): def __init__(self, *args, **kwargs): super(TestBase, self).__init__(*args, **kwargs) self.patcher_xvfb = patch('cabu.drivers.Xvfb', spec=True) self.patcher_xvfb.start() self.patcher_ftpretty = patch('cabu.core.ftpretty', spec=True) self.patcher_ftpretty.start() def __del__(self, *args, **kwargs): self.patcher_ftpretty.stop() self.patcher_xvfb.stop() def __exit__(self, *args, **kwargs): self.patcher_ftpretty.stop() self.patcher_xvfb.stop() super(TestBase, self).__exit__(*args, **kwargs) @patch('cabu.drivers.load_phantomjs', return_value=MagicMock()) def setUp(self, mock_driver): if 'CABU_SETTINGS' in os.environ: del os.environ['CABU_SETTINGS'] os.environ['CABU_SETTINGS'] = 'cabu.tests.test_settings' self.app = Cabu(__name__) self.config = self.app.config self.vdisplay = self.app.vdisplay self.client = self.app.test_client() def tearDown(self): if hasattr(self, 'ftp'): self.ftp.close() if 'CABU_SETTINGS' in os.environ: del os.environ['CABU_SETTINGS'] if hasattr(self, 'app'): del self.app def get(self, resource, item=None, query='', headers=[]): url = self.resolve_resource(resource, item) res = self.client.get(url + query, headers=headers) return self.parse_response(res) def post(self, resource, data, item=None, headers=[], content_type=None): if not content_type: content_type = 'application/json' headers.append(('Content-Type', content_type)) url = self.resolve_resource(resource, item) res = self.client.post(url, data=json.dumps(data), headers=headers) return self.parse_response(res) def put(self, resource, data, item=None, headers=[]): headers.append(('Content-Type', 'application/json')) url = self.resolve_resource(resource, item) res = self.client.put(url, data=json.dumps(data), headers=headers) return self.parse_response(res) def patch(self, resource, data, item=None, headers=[]): headers.append(('Content-Type', 'application/json')) url = self.resolve_resource(resource, item) res = self.client.patch(url, data=json.dumps(data), headers=headers) return self.parse_response(res) def delete(self, resource, item=None, headers=None): url = self.resolve_resource(resource, item) res = self.client.delete(url, headers=headers) return self.parse_response(res) def parse_response(self, res): val = None if res.get_data(): val = res.get_data().decode("utf-8") try: val = json.loads(val) except ValueError: self.fail("'%s' is not valid JSON" % (val)) return val, res.status_code
# -*- coding: utf-8 -*- import os from cabu import Cabu from flask import jsonify os.environ['DRIVER_NAME'] = 'PhantomJS' # os.environ['DRIVER_NAME'] = 'Firefox' # os.environ['DRIVER_BINARY_PATH'] = 'iceweasel' app = Cabu(__name__) @app.route('/gizmodo_last_articles_links') def gizmodo_last_articles(): app.webdriver.get('http://www.gizmodo.com') articles_links = [ i.get_attribute('href') for i in app.webdriver.find_elements_by_css_selector('h1.headline>a') ] return jsonify({'message': 'Last articles', 'articles': articles_links}) @app.route('/test_headers') def test_headers(): app.webdriver.get('http://requestb.in/11vj4ii1') return jsonify({'message': 'Test header', 'status': 'ok'}) app.run(host='0.0.0.0', port=8080, debug=True)