From 58eee7ad49ad784c5ba1bac154b1a80c44bbc7ef Mon Sep 17 00:00:00 2001 From: Kirill Mysnik Date: Fri, 11 Nov 2016 13:55:28 +0300 Subject: [PATCH 1/3] TranslationStrings now support other TranslationStrings instances in tokens Removed LangStrings.get_strings Added TranslationStrings.tokenized --- .../source-python/translations/strings.py | 55 ++++++++++++++++--- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/addons/source-python/packages/source-python/translations/strings.py b/addons/source-python/packages/source-python/translations/strings.py index 6984584bd..21b331838 100644 --- a/addons/source-python/packages/source-python/translations/strings.py +++ b/addons/source-python/packages/source-python/translations/strings.py @@ -217,12 +217,6 @@ def _replace_escaped_sequences(given_string): # Return the replaced string return given_string - def get_strings(self, key, **tokens): - """Return a TranslationStrings object with updated tokens.""" - strings = self[key] - strings.tokens.update(tokens) - return strings - class TranslationStrings(dict): """Stores and get language strings for a particular string.""" @@ -250,11 +244,39 @@ def get_string(self, language=None, **tokens): # Possibly raise an error silently here return '' - # Update the stored tokens with the given ones - self.tokens.update(tokens) + # Expose all TranslationStrings instances in self.tokens + exposed_tokens = {} + for token_name, token in self.tokens.items(): + if isinstance(token, TranslationStrings): + + # Pass additional tokens - these will be used to format + # the string + token = token.get_string(language, **tokens) + + exposed_tokens[token_name] = token + + # Expose all TranslationsStrings instances in **tokens + for token_name, token in tokens.items(): + if isinstance(token, TranslationStrings): + + # Don't pass any additional tokens, the token should either + # be trivial or rely on itself (self.tokens) + token = token.get_string(language) + + exposed_tokens[token_name] = token + + # Get the language shortname to be used + language = self.get_language(language) + + # Was a valid language found? + if language is None: + + # Return an empty string + # Possibly raise an error silently here + return '' # Return the formatted message - return self[language].format(**self.tokens) + return self[language].format(**exposed_tokens) def get_language(self, language): """Return the language to be used.""" @@ -291,5 +313,20 @@ def get_language(self, language): # Return None as the language, as no language has been found return None + def tokenized(self, **tokens): + """Create a new TranslationStrings instance and store tokens in it. + + :param dict tokens: Tokens to store in the instance. + :return: New TranslationStrings instance with tokens stored in it. + :rtype: TranslationStrings + """ + result = TranslationStrings() + result.tokens.update(tokens) + + for key, value in self.items(): + result[key] = value + + return result + # Get the translations language strings _translation_strings = LangStrings('_core/translations_strings') From 540abccead07e3e7d3ba8728935612ff9efcac52 Mon Sep 17 00:00:00 2001 From: Kirill Mysnik Date: Fri, 11 Nov 2016 13:58:42 +0300 Subject: [PATCH 2/3] Removed duplicate language checks --- .../packages/source-python/translations/strings.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/addons/source-python/packages/source-python/translations/strings.py b/addons/source-python/packages/source-python/translations/strings.py index 21b331838..ed7ed50db 100644 --- a/addons/source-python/packages/source-python/translations/strings.py +++ b/addons/source-python/packages/source-python/translations/strings.py @@ -265,16 +265,6 @@ def get_string(self, language=None, **tokens): exposed_tokens[token_name] = token - # Get the language shortname to be used - language = self.get_language(language) - - # Was a valid language found? - if language is None: - - # Return an empty string - # Possibly raise an error silently here - return '' - # Return the formatted message return self[language].format(**exposed_tokens) From 8aebe31c3aca1aab47d04145ae323935876f65b7 Mon Sep 17 00:00:00 2001 From: KirillMysnik Date: Wed, 5 Apr 2017 19:10:57 +0300 Subject: [PATCH 3/3] Fixed #189 --- addons/source-python/packages/source-python/auth/manager.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/source-python/packages/source-python/auth/manager.py b/addons/source-python/packages/source-python/auth/manager.py index cf03dd164..5d4b0595f 100644 --- a/addons/source-python/packages/source-python/auth/manager.py +++ b/addons/source-python/packages/source-python/auth/manager.py @@ -337,7 +337,11 @@ def is_player_authorized(self, index, permission): :rtype: bool """ - return permission in self.get_player_permissions(index) + permissions = self.get_player_permissions(index) + if permissions is None: + return False + + return permission in permissions def get_parent_permissions(self, parent_name): """Return the parent permissions.