[cc-commits] [SCM] License chooser & etc (branch master) updated. 72f40f9154386a2642e5ade09988ff5ba612864e
git version control
git at a7.creativecommons.org
Wed Jan 6 17:34:48 EST 2010
The branch, master has been updated
via 72f40f9154386a2642e5ade09988ff5ba612864e (commit)
via cb05c4cbd682d09a00e14481958c9a15f8981f37 (commit)
via 29e3507a0f70575670ead0be956cc35802fe7ea4 (commit)
via e340b6f5a06d36248a948343245c25b302dd7902 (commit)
via dbf430432d25927d4bf98c20121136e196497e85 (commit)
via 068dac78f458c4d25f2da1c43e9436c26b8143b7 (commit)
via 9e1bce43c4f94da4af0cd46520c5bcc52f9983b0 (commit)
via c858663d735605e7bb7523b18eabc138ae560bcc (commit)
via 479d92fa5baed5118972b9b06d3eafc3818397e5 (commit)
via 1c5366e7724038d18199c5a9aae056acbbdc85bb (commit)
via 2decdc6b6cf8a3efe6d8f4c5011d68699b257d04 (commit)
via 5b62e458e52375fad94d191901f26ffc9aaf512f (commit)
via 62626ba284b6a152fd333a9b0b19f8c68395ce21 (commit)
from 77535b97d47499ad0e7fe60ae4e333328e1a4691 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 72f40f9154386a2642e5ade09988ff5ba612864e
Merge: cb05c4cbd682d09a00e14481958c9a15f8981f37 2decdc6b6cf8a3efe6d8f4c5011d68699b257d04
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 16:34:17 2010 -0600
Merge branch 'webtest'
commit cb05c4cbd682d09a00e14481958c9a15f8981f37
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 16:33:55 2010 -0600
Removed old test stuff, added RDF tests
commit 29e3507a0f70575670ead0be956cc35802fe7ea4
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 16:33:20 2010 -0600
Default to 'en' when we don't have a target lang specified
commit e340b6f5a06d36248a948343245c25b302dd7902
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 15:44:44 2010 -0600
Have a nice basic test system for deeds
commit dbf430432d25927d4bf98c20121136e196497e85
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 15:31:53 2010 -0600
Converted the classes to something that won't destroy nosetests
(but won't pass either)
commit 068dac78f458c4d25f2da1c43e9436c26b8143b7
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 15:29:57 2010 -0600
Standard deed minimal tests
commit 9e1bce43c4f94da4af0cd46520c5bcc52f9983b0
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 14:48:37 2010 -0600
Switchinv over test_root_view and test_licenses_view to use webtest
commit c858663d735605e7bb7523b18eabc138ae560bcc
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 14:46:54 2010 -0600
We were never returning the pt_render response w/ CCLPageTemplateFileTester!
Fixed :)
commit 479d92fa5baed5118972b9b06d3eafc3818397e5
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 14:33:10 2010 -0600
Restoring the old really simple root_view
commit 1c5366e7724038d18199c5a9aae056acbbdc85bb
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 14:31:52 2010 -0600
Fixing an issue with double slashes and bad variable names in RemoteStaticDirect
commit 2decdc6b6cf8a3efe6d8f4c5011d68699b257d04
Merge: 62626ba284b6a152fd333a9b0b19f8c68395ce21 5b62e458e52375fad94d191901f26ffc9aaf512f
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 14:04:28 2010 -0600
Merge branch 'master' into webtest
commit 5b62e458e52375fad94d191901f26ffc9aaf512f
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 14:01:25 2010 -0600
Raise an error if one of direct_remote_path or direct_remote_paths
isn't raised
commit 62626ba284b6a152fd333a9b0b19f8c68395ce21
Author: Christopher Allan Webber <cwebber at dustycloud.org>
Date: Wed Jan 6 13:52:09 2010 -0600
Make webtest a requirement
-----------------------------------------------------------------------
Summary of changes (followed by patch):
cc/engine/app.py | 7 ++-
cc/engine/licenses/views.py | 12 ++-
cc/engine/staticdirect.py | 4 +-
cc/engine/tests/test_views.py | 184 ++++++++++++++++-------------------------
cc/engine/util.py | 2 +-
cc/engine/views.py | 4 +-
setup.py | 1 +
7 files changed, 92 insertions(+), 122 deletions(-)
diff --git a/cc/engine/app.py b/cc/engine/app.py
index 0b1feb3..272627d 100644
--- a/cc/engine/app.py
+++ b/cc/engine/app.py
@@ -7,6 +7,10 @@ from webob import Request, exc
from cc.engine import routing, staticdirect
+class Error(object): pass
+class ImproperlyConfigured(Error): pass
+
+
def load_controller(string):
module_name, func_name = string.split(':', 1)
__import__(module_name)
@@ -55,6 +59,7 @@ def ccengine_app_factory(global_config, **kw):
dict([line.strip().split(' ', 1)
for line in kw['direct_remote_paths'].strip().splitlines()]))
else:
- staticdirector = staticdirect.LocalStaticDirect()
+ raise ImproperlyConfigured(
+ "One of direct_remote_path or direct_remote_paths must be provided")
return CCEngineApp(staticdirector)
diff --git a/cc/engine/licenses/views.py b/cc/engine/licenses/views.py
index 0bda6c1..345dd94 100644
--- a/cc/engine/licenses/views.py
+++ b/cc/engine/licenses/views.py
@@ -57,9 +57,15 @@ def license_deed_view(request, license):
identity_data = util.get_locale_identity_data(request)
- target_lang = (
- request.matchdict.get('target_lang')
- or request.accept_language.best_matches()[0])
+ # TODO: Adjust this target_lang stuff!
+ accept_lang_matches = request.accept_language.best_matches()
+ if request.matchdict.has_key('target_lang'):
+ target_lang = request.matchdict.get('target_lang')
+ elif accept_lang_matches:
+ target_lang = accept_lang_matches[0]
+ else:
+ target_lang = 'en'
+
rdf_style_target_lang = target_lang.replace('_', '-').lower()
license_title = None
diff --git a/cc/engine/staticdirect.py b/cc/engine/staticdirect.py
index 0572d16..21b422e 100644
--- a/cc/engine/staticdirect.py
+++ b/cc/engine/staticdirect.py
@@ -24,11 +24,11 @@ class StaticDirect(object):
class RemoteStaticDirect(StaticDirect):
def __init__(self, remotepath):
StaticDirect.__init__(self)
- self.remotepath = remotepath
+ self.remotepath = remotepath.rstrip('/')
def get(self, request, filepath):
return '%s/%s' % (
- self.remotepath, rest.lstrip('/'))
+ self.remotepath, filepath.lstrip('/'))
class MultiRemoteStaticDirect(StaticDirect):
diff --git a/cc/engine/tests/test_views.py b/cc/engine/tests/test_views.py
index 8f14fa2..ba4f71b 100644
--- a/cc/engine/tests/test_views.py
+++ b/cc/engine/tests/test_views.py
@@ -1,11 +1,10 @@
import pkg_resources
import lxml
+import webtest
from webob import Request
-from cc.engine.app import load_controller
-from cc.engine import util
-from cc.engine import views
+from cc.engine import app, staticdirect, util, views
from cc.engine.licenses import views as license_views
import cc.license
@@ -24,124 +23,85 @@ def test_routing():
### view testing
### ------------
-def test_root_view():
- response = views.root_view(Request.blank('/'))
- assert response.unicode_body == 'This is the root'
-
-
-def test_licenses_view():
- request = Request.blank('/licenses/')
- response = license_views.licenses_view(request)
- namespace = util.ZPT_TEST_TEMPLATES.pop(
- util.full_zpt_filename('catalog_pages/licenses-index.pt'))
- namespace['request'] == request
+TESTAPP = webtest.TestApp(
+ app.CCEngineApp(
+ staticdirect.RemoteStaticDirect('/static/')))
-def _lc_tester():
- pass
-
-
-# expected_license = cc.license.by_code(
+def test_root_view():
+ response = TESTAPP.get('/')
+ assert response.body == 'This is the root'
-### Basic view testing class
-class BaseViewTests(object):
- def setUp(self):
- self.request = Request.blank(self.url)
- self.request.matchdict = self.matchdict
- self.controller = load_controller(self.matchdict['controller'])
- self.response = self.controller(self.request)
+def test_licenses_view():
+ response = TESTAPP.get('/licenses/')
+ assert '<h1>Creative Commons Licenses</h1>' in response.body
## Deed view tests
-class BaseDeedView(BaseViewTests):
- def test_template_namespace_matching(self):
- """
- Make sure that the elements in our expected_namespace match
- the elements in the actual namespace passed in.
-
- As a side effect, this also checks that the template used is
- the one we expected :)
- """
- namespace = util.ZPT_TEST_TEMPLATES.pop(
- util.full_zpt_filename('licenses/standard_templates/deed.pt'))
- for key, value in self.expected_namespace.iteritems():
- assert namespace[key] == value
-
-
-class TestByNdDeedThreeOhView(BaseDeedView):
- url = '/licenses/by-nd/3.0/'
- matchdict = {
- 'code': 'by-nd',
- 'version': '3.0',
- 'controller': 'cc.engine.licenses.views:license_deed_view'}
- expected_namespace = {
- 'license': cc.license.by_code('by-nd', '3.0'),
- }
-
-
-#####
-### BSD/MIT license checks: We know these fail currently :(
-#####
-
-class FakeBSDLicense(object): pass
-class FakeMITLicense(object): pass
-
-class TestBSDView(BaseDeedView):
- url = '/licenses/BSD/'
- matchdict = {
- # Code??? version???
- 'controller': 'cc.engine.licenses.views:license_deed_view'}
- expected_namespace = {
- 'license': FakeBSDLicense()}
-
- def test_title(self):
- # This test totally sucks
- 'BSD License' in self.unicode_body
-
-
-class TestMITView(BaseDeedView):
- url = '/licenses/MIT/'
- matchdict = {
- # Code??? version???
- 'controller': 'cc.engine.licenses.views:license_deed_view'}
- expected_namespace = {
- 'license': FakeMITLicense()}
-
- def test_title(self):
- # This test totally sucks
- 'MIT License' in self.unicode_body
-
-
-## RDF view tests
-
-class BaseTestLicenseRdfView(BaseViewTests):
- def _read_rdf_file_contents(self):
- return file(
- pkg_resources.resource_filename(
- 'cc.licenserdf', self.rdf_file)).read()
-
- def test_has_rdf(self):
- rdf_contents = util.unicode_cleaner(self._read_rdf_file_contents())
- assert rdf_contents == self.response.unicode_body
-
- def test_headers(self):
- expected_header = 'application/rdf+xml; charset=UTF-8'
- assert self.response.headers['Content-Type'] == expected_header
-
-
-class TestBySaRDFView(BaseTestLicenseRdfView):
- url = '/licenses/by-sa/2.0/rdf'
- matchdict = {
- 'code': 'by-sa',
- 'version': '2.0',
- 'controller': 'cc.engine.licenses.views:license_rdf_view'}
- rdf_file = 'licenses/creativecommons.org_licenses_by-sa_2.0_.rdf'
-
+def _deed_tester(url, template_path,
+ expected_code, expected_version, expected_jurisdiction,
+ expected_license):
+ response = TESTAPP.get(url)
+ namespace = util.ZPT_TEST_TEMPLATES.pop(
+ util.full_zpt_filename(template_path))
+ request = namespace['request']
+ assert namespace['license'] == expected_license
+ assert request.matchdict.get('code') == expected_code
+ assert request.matchdict.get('version') == expected_version
+ assert request.matchdict.get('jurisdiction') == expected_jurisdiction
+
+
+def test_standard_deeds_licenses():
+ """
+ Make sure the correct licenses get selected from the deeds
+ """
+ _deed_tester(
+ '/licenses/by/3.0/', 'licenses/standard_templates/deed.pt',
+ 'by', '3.0', None,
+ cc.license.by_code('by', '3.0'))
+ _deed_tester(
+ '/licenses/by-sa/3.0/', 'licenses/standard_templates/deed.pt',
+ 'by-sa', '3.0', None,
+ cc.license.by_code('by-sa'))
+
+ # MIT and BSD, the only ones which are called without version
+ # codes in the URL
+ _deed_tester(
+ '/licenses/MIT/', 'licenses/mitbsd_templates/deed.pt',
+ 'MIT', None, None,
+ cc.license.by_code('MIT'))
+ _deed_tester(
+ '/licenses/BSD/', 'licenses/mitbsd_templates/deed.pt',
+ 'BSD', None, None,
+ cc.license.by_code('BSD'))
-def test_license_deeds():
- pass
+## RDF view tests
+RDF_HEADER = 'application/rdf+xml; charset=UTF-8'
+
+def _rdf_tester(url, rdf_file):
+ response = TESTAPP.get(url)
+ rdf_file_contents = util.unicode_cleaner(
+ file(pkg_resources.resource_filename(
+ 'cc.licenserdf', rdf_file)).read())
+ assert response.headers['Content-Type'] == RDF_HEADER
+ assert response.unicode_body == rdf_file_contents
+
+def test_rdf_views():
+ _rdf_tester(
+ '/licenses/by-sa/2.0/rdf',
+ 'licenses/creativecommons.org_licenses_by-sa_2.0_.rdf')
+ _rdf_tester(
+ '/licenses/by/3.0/rdf',
+ 'licenses/creativecommons.org_licenses_by_3.0_.rdf')
+
+ _rdf_tester(
+ '/licenses/MIT/rdf',
+ 'licenses/creativecommons.org_licenses_MIT_.rdf')
+ _rdf_tester(
+ '/licenses/BSD/rdf',
+ 'licenses/creativecommons.org_licenses_BSD_.rdf')
diff --git a/cc/engine/util.py b/cc/engine/util.py
index a21d0b3..d96ece8 100644
--- a/cc/engine/util.py
+++ b/cc/engine/util.py
@@ -38,7 +38,7 @@ ZPT_TEST_TEMPLATES = {}
class CCLPageTemplateFileTester(CCLPageTemplateFile):
def pt_render(self, namespace, *args, **kwargs):
ZPT_TEST_TEMPLATES[self.filename] = namespace
- CCLPageTemplateFile.pt_render(self, namespace, *args, **kwargs)
+ return CCLPageTemplateFile.pt_render(self, namespace, *args, **kwargs)
def _activate_zpt_testing():
global ZPT_TEST_ENABLED
diff --git a/cc/engine/views.py b/cc/engine/views.py
index e203dfe..384e0e3 100644
--- a/cc/engine/views.py
+++ b/cc/engine/views.py
@@ -6,6 +6,4 @@ from cc.engine import util
def root_view(request):
- return Response("/foo/what is at %s, /blah/bar is at %s" % (
- request.staticdirect('/foo/what/'),
- request.staticdirect('/blah/bar/')))
+ return Response("This is the root")
diff --git a/setup.py b/setup.py
index 5570512..6b2e019 100644
--- a/setup.py
+++ b/setup.py
@@ -43,6 +43,7 @@ setup(
'WebOb',
'routes',
'sphinx',
+ 'webtest',
],
# author metadata
hooks/post-receive
--
License chooser & etc
More information about the cc-commits
mailing list