changeset 2836:819eb7f8a555 beta

Implemented patch from andrewsh ref #565 Add support for {netloc} and {scheme} to alternative_gravatar_url
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 13 Sep 2012 20:07:43 +0200
parents faffec4abbda
children 6de759107792
files development.ini production.ini rhodecode/config/deployment.ini_tmpl rhodecode/lib/helpers.py rhodecode/tests/test_libs.py
diffstat 5 files changed, 47 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/development.ini	Thu Sep 13 19:36:56 2012 +0200
+++ b/development.ini	Thu Sep 13 20:07:43 2012 +0200
@@ -69,6 +69,8 @@
 ## {email}        user email
 ## {md5email}     md5 hash of the user email (like at gravatar.com)
 ## {size}         size of the image that is expected from the server application
+## {scheme}       http/https from RhodeCode server
+## {netloc}       network location from RhodeCode server
 #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
 #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
 
--- a/production.ini	Thu Sep 13 19:36:56 2012 +0200
+++ b/production.ini	Thu Sep 13 20:07:43 2012 +0200
@@ -69,6 +69,8 @@
 ## {email}        user email
 ## {md5email}     md5 hash of the user email (like at gravatar.com)
 ## {size}         size of the image that is expected from the server application
+## {scheme}       http/https from RhodeCode server
+## {netloc}       network location from RhodeCode server
 #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
 #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
 
--- a/rhodecode/config/deployment.ini_tmpl	Thu Sep 13 19:36:56 2012 +0200
+++ b/rhodecode/config/deployment.ini_tmpl	Thu Sep 13 20:07:43 2012 +0200
@@ -69,6 +69,8 @@
 ## {email}        user email
 ## {md5email}     md5 hash of the user email (like at gravatar.com)
 ## {size}         size of the image that is expected from the server application
+## {scheme}       http/https from RhodeCode server
+## {netloc}       network location from RhodeCode server
 #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
 #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
 
--- a/rhodecode/lib/helpers.py	Thu Sep 13 19:36:56 2012 +0200
+++ b/rhodecode/lib/helpers.py	Thu Sep 13 20:07:43 2012 +0200
@@ -10,6 +10,7 @@
 import math
 import logging
 import re
+import urlparse
 
 from datetime import datetime
 from pygments.formatters.html import HtmlFormatter
@@ -711,11 +712,15 @@
 #==============================================================================
 
 def gravatar_url(email_address, size=30):
+    from pylons import url  ## doh, we need to re-import url to mock it later
     if(str2bool(config['app_conf'].get('use_gravatar')) and
        config['app_conf'].get('alternative_gravatar_url')):
         tmpl = config['app_conf'].get('alternative_gravatar_url', '')
+        parsed_url = urlparse.urlparse(url.current(qualified=True))
         tmpl = tmpl.replace('{email}', email_address)\
-                   .replace('{md5email}', hashlib.md5(email_address.lower()).hexdigest())\
+                   .replace('{md5email}', hashlib.md5(email_address.lower()).hexdigest()) \
+                   .replace('{netloc}', parsed_url.netloc)\
+                   .replace('{scheme}', parsed_url.scheme)\
                    .replace('{size}', str(size))
         return tmpl
 
--- a/rhodecode/tests/test_libs.py	Thu Sep 13 19:36:56 2012 +0200
+++ b/rhodecode/tests/test_libs.py	Thu Sep 13 20:07:43 2012 +0200
@@ -159,19 +159,40 @@
             config['app_conf']['use_gravatar'] = True
             config['app_conf'].update(kwargs)
             return config
-        fake = fake_conf(alternative_gravatar_url='http://test.com/{email}')
-        with mock.patch('pylons.config', fake):
-            grav = gravatar_url(email_address='test@foo.com', size=24)
-            assert grav == 'http://test.com/test@foo.com'
+
+        class fake_url():
+            @classmethod
+            def current(cls, *args, **kwargs):
+                return 'https://server.com'
+
+        with mock.patch('pylons.url', fake_url):
+            fake = fake_conf(alternative_gravatar_url='http://test.com/{email}')
+            with mock.patch('pylons.config', fake):
+                    from pylons import url
+                    assert url.current() == 'http://server.com'
+                    grav = gravatar_url(email_address='test@foo.com', size=24)
+                    assert grav == 'http://test.com/test@foo.com'
+
+            fake = fake_conf(alternative_gravatar_url='http://test.com/{email}')
+            with mock.patch('pylons.config', fake):
+                grav = gravatar_url(email_address='test@foo.com', size=24)
+                assert grav == 'http://test.com/test@foo.com'
 
-        fake = fake_conf(alternative_gravatar_url='http://test.com/{md5email}')
-        with mock.patch('pylons.config', fake):
-            em = 'test@foo.com'
-            grav = gravatar_url(email_address=em, size=24)
-            assert grav == 'http://test.com/%s' % (_md5(em))
+            fake = fake_conf(alternative_gravatar_url='http://test.com/{md5email}')
+            with mock.patch('pylons.config', fake):
+                em = 'test@foo.com'
+                grav = gravatar_url(email_address=em, size=24)
+                assert grav == 'http://test.com/%s' % (_md5(em))
 
-        fake = fake_conf(alternative_gravatar_url='http://test.com/{md5email}/{size}')
-        with mock.patch('pylons.config', fake):
-            em = 'test@foo.com'
-            grav = gravatar_url(email_address=em, size=24)
-            assert grav == 'http://test.com/%s/%s' % (_md5(em), 24)
+            fake = fake_conf(alternative_gravatar_url='http://test.com/{md5email}/{size}')
+            with mock.patch('pylons.config', fake):
+                em = 'test@foo.com'
+                grav = gravatar_url(email_address=em, size=24)
+                assert grav == 'http://test.com/%s/%s' % (_md5(em), 24)
+
+            fake = fake_conf(alternative_gravatar_url='{scheme}://{netloc}/{md5email}/{size}')
+            with mock.patch('pylons.config', fake):
+                em = 'test@foo.com'
+                grav = gravatar_url(email_address=em, size=24)
+                assert grav == 'https://server.com/%s/%s' % (_md5(em), 24)
+