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. diff --git a/addons/source-python/packages/source-python/translations/strings.py b/addons/source-python/packages/source-python/translations/strings.py index 6984584bd..ed7ed50db 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,29 @@ 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 # 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 +303,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')