Fixed issue with company details if its name has unicode chars

Also:
* fixed case of company name
* inner decorator functions are renamed to simplify stack trace analysis

Fixes bug 1202169

Change-Id: Idd7212b838fb3ae88228d513a24bf1d104d2b617
This commit is contained in:
Ilya Shakhat 2013-07-17 16:52:31 +04:00
parent b3bfb7b7f2
commit 31101fa618
3 changed files with 14 additions and 13 deletions

View File

@ -80,7 +80,7 @@ class CachedMemoryStorage(MemoryStorage):
def get_record_ids_by_companies(self, companies): def get_record_ids_by_companies(self, companies):
return self._get_record_ids_from_index( return self._get_record_ids_from_index(
map(self._get_company_name, companies), map(self.get_original_company_name, companies),
self.company_index) self.company_index)
def get_record_ids_by_launchpad_ids(self, launchpad_ids): def get_record_ids_by_launchpad_ids(self, launchpad_ids):
@ -97,7 +97,7 @@ class CachedMemoryStorage(MemoryStorage):
for i in record_ids: for i in record_ids:
yield self.records[i] yield self.records[i]
def _get_company_name(self, company_name): def get_original_company_name(self, company_name):
normalized = company_name.lower() normalized = company_name.lower()
if normalized not in self.company_name_mapping: if normalized not in self.company_name_mapping:
raise Exception('Unknown company name %s' % company_name) raise Exception('Unknown company name %s' % company_name)

View File

@ -203,7 +203,7 @@
return index + "=" + val; return index + "=" + val;
}).join("&"); }).join("&");
return uri + "?" + str; return (str == "")? uri: uri + "?" + str;
} }
function make_std_options() { function make_std_options() {

View File

@ -142,7 +142,7 @@ def record_filter(ignore=None, use_default=True):
def decorator(f): def decorator(f):
@functools.wraps(f) @functools.wraps(f)
def decorated_function(*args, **kwargs): def record_filter_decorated_function(*args, **kwargs):
vault = get_vault() vault = get_vault()
memory_storage = vault['memory_storage'] memory_storage = vault['memory_storage']
@ -188,7 +188,7 @@ def record_filter(ignore=None, use_default=True):
kwargs['records'] = memory_storage.get_records(record_ids) kwargs['records'] = memory_storage.get_records(record_ids)
return f(*args, **kwargs) return f(*args, **kwargs)
return decorated_function return record_filter_decorated_function
return decorator return decorator
@ -196,7 +196,7 @@ def record_filter(ignore=None, use_default=True):
def aggregate_filter(): def aggregate_filter():
def decorator(f): def decorator(f):
@functools.wraps(f) @functools.wraps(f)
def decorated_function(*args, **kwargs): def aggregate_filter_decorated_function(*args, **kwargs):
metric_param = (flask.request.args.get('metric') or metric_param = (flask.request.args.get('metric') or
get_default('metric')) get_default('metric'))
@ -211,7 +211,7 @@ def aggregate_filter():
kwargs['metric_filter'] = metric_filter kwargs['metric_filter'] = metric_filter
return f(*args, **kwargs) return f(*args, **kwargs)
return decorated_function return aggregate_filter_decorated_function
return decorator return decorator
@ -219,14 +219,14 @@ def aggregate_filter():
def exception_handler(): def exception_handler():
def decorator(f): def decorator(f):
@functools.wraps(f) @functools.wraps(f)
def decorated_function(*args, **kwargs): def exception_handler_decorated_function(*args, **kwargs):
try: try:
return f(*args, **kwargs) return f(*args, **kwargs)
except Exception as e: except Exception as e:
LOG.debug(e) LOG.debug(e)
flask.abort(404) flask.abort(404)
return decorated_function return exception_handler_decorated_function
return decorator return decorator
@ -234,7 +234,7 @@ def exception_handler():
def templated(template=None): def templated(template=None):
def decorator(f): def decorator(f):
@functools.wraps(f) @functools.wraps(f)
def decorated_function(*args, **kwargs): def templated_decorated_function(*args, **kwargs):
vault = get_vault() vault = get_vault()
template_name = template template_name = template
@ -270,7 +270,7 @@ def templated(template=None):
return flask.render_template(template_name, **ctx) return flask.render_template(template_name, **ctx)
return decorated_function return templated_decorated_function
return decorator return decorator
@ -336,7 +336,8 @@ def contribution_details(records, limit=DEFAULT_RECORDS_LIMIT):
@record_filter() @record_filter()
def company_details(company, records): def company_details(company, records):
details = contribution_details(records) details = contribution_details(records)
details['company'] = company details['company'] = (
get_memory_storage().get_original_company_name(company))
return details return details
@ -486,7 +487,7 @@ def format_launchpad_module_link(module):
@app.template_filter('encode') @app.template_filter('encode')
def safe_encode(s): def safe_encode(s):
return urllib.quote_plus(s) return urllib.quote_plus(s.encode('utf-8'))
@app.template_filter('link') @app.template_filter('link')