class ITWSHOPConfig(ConfigFile): schema = { 'url': String(default=''), 'source_language': LanguageTag(default=('en', 'EN')), 'target_languages': Tokens(default=(('en', 'EN'), )), 'skin_path': String(default=''), 'show_language_title': Boolean(default=False) }
def get_dynamic_property_and_language(self, name, dynamic_schema, language=None): value, language = ShopFolder.get_property_and_language(self, name, language) datatype = dynamic_schema[name] # Default value if value is None: value = datatype.get_default() elif getattr(datatype, "multiple", False): if not isinstance(value, list): # Decode the property # Only support list of strings value = list(Tokens.decode(value)) # Else a list was already set by "set_property" else: value = datatype.decode(value) return value, language
def set_property(self, name, value, language=None, with_dynamic=True): """Added to handle dynamic properties. The value is encoded because metadata won't know about its datatype. The multilingual status must be detected to give or not the "language" argument. """ dynamic_schema = self.get_dynamic_schema() if with_dynamic else None # Fire listeners if dynamic_schema and name in dynamic_schema: # dynamic value old_value = self.get_dynamic_property(name, dynamic_schema, language) else: old_value = self.get_property(name) new_value = value alert_listerners('set_property', self, self.class_id, name, old_value, new_value) # Dynamic property? if with_dynamic is True: if name in dynamic_schema: datatype = dynamic_schema[name] if getattr(datatype, 'multiple', False): return ShopFolder.set_property(self, name, Tokens.encode(value)) elif getattr(datatype, 'multilingual', False): # If the value equals the default value # set the property to None (String's default value) # to avoid problems during the language negociation if value == datatype.get_default(): # XXX Should not be hardcoded # Default value for String datatype is None value = None else: value = datatype.encode(value) return ShopFolder.set_property(self, name, value, language) # Even if the language was not None, this property is not # multilingual so ignore it. return ShopFolder.set_property(self, name, datatype.encode(value)) # Standard property schema = self.get_metadata_schema() datatype = schema[name] if getattr(datatype, 'multilingual', False): return ShopFolder.set_property(self, name, value, language) return ShopFolder.set_property(self, name, value)
def set_property(self, name, value, language=None, with_dynamic=True): """Added to handle dynamic properties. The value is encoded because metadata won't know about its datatype. The multilingual status must be detected to give or not the "language" argument. """ dynamic_schema = self.get_dynamic_schema() if with_dynamic else None # Fire listeners if dynamic_schema and name in dynamic_schema: # dynamic value old_value = self.get_dynamic_property(name, dynamic_schema, language) else: old_value = self.get_property(name) new_value = value alert_listerners("set_property", self, self.class_id, name, old_value, new_value) # Dynamic property? if with_dynamic is True: if name in dynamic_schema: datatype = dynamic_schema[name] if getattr(datatype, "multiple", False): return ShopFolder.set_property(self, name, Tokens.encode(value)) elif getattr(datatype, "multilingual", False): # If the value equals the default value # set the property to None (String's default value) # to avoid problems during the language negociation if value == datatype.get_default(): # XXX Should not be hardcoded # Default value for String datatype is None value = None else: value = datatype.encode(value) return ShopFolder.set_property(self, name, value, language) # Even if the language was not None, this property is not # multilingual so ignore it. return ShopFolder.set_property(self, name, datatype.encode(value)) # Standard property schema = self.get_metadata_schema() datatype = schema[name] if getattr(datatype, "multilingual", False): return ShopFolder.set_property(self, name, value, language) return ShopFolder.set_property(self, name, value)
def get_dynamic_property_and_language(self, name, dynamic_schema, language=None): value, language = ShopFolder.get_property_and_language( self, name, language) datatype = dynamic_schema[name] # Default value if value is None: value = datatype.get_default() elif getattr(datatype, 'multiple', False): if not isinstance(value, list): # Decode the property # Only support list of strings value = list(Tokens.decode(value)) # Else a list was already set by "set_property" else: value = datatype.decode(value) return value, language
class SetupFile(ConfigFile): """abstract a setup.conf file """ schema = { 'name': String(default=''), 'title': String(default=''), 'url': String(default=''), 'author_name': String(default=''), 'author_email': String(default=''), 'license': String(default=''), 'description': String(default=''), 'packages': Tokens, 'requires': Tokens, 'provides': Tokens, 'scripts': Tokens, 'source_language': LanguageTag(default=('en', 'EN')), 'target_languages': Tokens(default=(('en', 'EN'), )) }
def test_Tokens(self): data = 'value1 value2 value3' result = ('value1', 'value2', 'value3') self.assertEqual(Tokens.decode(data), result) self.assertEqual(Tokens.encode(result), data)
def test_Tokens(self): data = "value1 value2 value3" result = ("value1", "value2", "value3") self.assertEqual(Tokens.decode(data), result) self.assertEqual(Tokens.encode(result), data)