Beispiel #1
0
def manage_addFile(context, identifier, title=None, file=None):
    """Add a File
    """
    filename = None
    if hasattr(file, "name"):
        filename = os.path.basename(file.name)

    container = context
    if ISilvaFactoryDispatcher.providedBy(container):
        container = container.Destination()

    chooser = ISilvaNameChooser(container)
    identifier = chooser.chooseName(identifier or filename, None, file=file, interface=interfaces.IAsset)
    try:
        chooser.checkName(identifier, None)
    except ContentError as e:
        raise ValueError(_(u"Please provide a unique id: ${reason}", mapping=dict(reason=e.reason)))
    service = getUtility(IFilesService)
    context._setObject(identifier, service.new_file(identifier))
    content = context._getOb(identifier)
    if title is not None:
        content.set_title(title)
    if file is not None:
        content.set_file(file)
    notify(ObjectCreatedEvent(content))
    return content
Beispiel #2
0
def manage_addImage(context, identifier, title=None, file=None):
    """Add an Image.
    """
    if file is not None:
        validate_image(file)

    filename = None
    if hasattr(file, 'name'):
        filename = os.path.basename(file.name)

    container = context
    if ISilvaFactoryDispatcher.providedBy(container):
        container = container.Destination()

    name_chooser = ISilvaNameChooser(container)
    identifier = name_chooser.chooseName(identifier or filename,
                                         None,
                                         file=file,
                                         interface=interfaces.IAsset)
    try:
        name_chooser.checkName(identifier, None)
    except ContentError as e:
        raise ValueError(
            _(u"Please provide a unique id: ${reason}",
              mapping=dict(reason=e.reason)))
    context._setObject(identifier, Image(identifier))
    content = context._getOb(identifier)
    if title is not None:
        content.set_title(title)
    if file is not None:
        content.set_image(file)
    notify(ObjectCreatedEvent(content))
    return content
Beispiel #3
0
    def factory_method(
        container, identifier, title, no_default_version=False, *args, **kw):
        if ISilvaFactoryDispatcher.providedBy(container):
            container = container.Destination()
        identifier = normalize_identifier(identifier)
        chooser = ISilvaNameChooser(container)
        try:
            chooser.checkName(
                identifier, None, interface=implementedBy(factory))
        except ContentError as e:
            raise ValueError(e.reason)
        content = factory(identifier)
        setattr(content, '__initialization__', True)
        container._setObject(identifier, content)
        content = container._getOb(identifier)

        if no_default_version is False:
            version_factory_name = getFactoryName(version)
            extension = extensionRegistry.get_extension(extension_name)

            content.create_version('0', None, None)
            version_factory = getattr(
                content.manage_addProduct[extension.product],
                version_factory_name)
            version_factory('0', title, *args, **kw)

        delattr(content, '__initialization__')
        notify(ContentCreatedEvent(
                content, no_default_version=no_default_version))
        return content
Beispiel #4
0
 def factory_method(
     container, identifier, title, no_default_content=False, *args, **kw):
     if ISilvaFactoryDispatcher.providedBy(container):
         container = container.Destination()
     identifier = normalize_identifier(identifier)
     chooser = ISilvaNameChooser(container)
     try:
         chooser.checkName(
             identifier, None, interface=implementedBy(factory))
     except ContentError as e:
         raise ValueError(e.reason)
     content = factory(identifier)
     setattr(content, '__initialization__', True)
     container._setObject(identifier, content)
     content = container._getOb(identifier)
     content.set_title(title)
     for key, value in kw.items():
         if hasattr(aq_base(content), 'set_%s' % key):
             setter = getattr(content, 'set_%s' % key)
             setter(value)
         elif hasattr(aq_base(content), key):
             setattr(content, key, value)
     delattr(content, '__initialization__')
     notify(ContentCreatedEvent(
             content, no_default_content=no_default_content))
     return content
 def _generate_id(self, string):
     """ This produces a chopped string id from a title, or
         text, or else uses unknown. For dublicates the
         method adds 1.
     """
     string = string.strip()
     if len(string) > 20:
         string = string[:20]
     chooser = ISilvaNameChooser(self)
     id = chooser.chooseName(string, None)
     # regex the cooked id and strip invalid characters
     # replace multiple underscores with single underscores
     # if no string use 'unknown'
     id = self.reg_start_under.sub(
         '', self.reg_under.sub('_', self.reg_nonword.sub('_', id)))
     if not id:
         id = 'unknown'
     if id in self.objectIds():
         highest = 1
         regex = re.compile('^%s_(\d+)$' % re.escape(id))
         for other_id in self.objectIds():
             match = regex.search(other_id)
             if match:
                 new_int = int(match.group(1))
                 if new_int > highest:
                     highest = new_int
         highest += 1
         id = '%s_%s' % (id, highest)
     return id
 def _generate_id(self, string):
     """ This produces a chopped string id from a title, or
         text, or else uses unknown. For dublicates the
         method adds 1.
     """
     string = string.strip()
     if len(string) > 20:
         string = string[:20]
     chooser = ISilvaNameChooser(self)
     id = chooser.chooseName(string, None)
     # regex the cooked id and strip invalid characters
     # replace multiple underscores with single underscores
     # if no string use 'unknown'
     id = self.reg_start_under.sub("", self.reg_under.sub("_", self.reg_nonword.sub("_", id)))
     if not id:
         id = "unknown"
     if id in self.objectIds():
         highest = 1
         regex = re.compile("^%s_(\d+)$" % re.escape(id))
         for other_id in self.objectIds():
             match = regex.search(other_id)
             if match:
                 new_int = int(match.group(1))
                 if new_int > highest:
                     highest = new_int
         highest += 1
         id = "%s_%s" % (id, highest)
     return id
Beispiel #7
0
def manage_addImage(context, identifier, title=None, file=None):
    """Add an Image.
    """
    if file is not None:
        validate_image(file)

    filename = None
    if hasattr(file, 'name'):
        filename = os.path.basename(file.name)

    container = context
    if ISilvaFactoryDispatcher.providedBy(container):
        container = container.Destination()

    name_chooser = ISilvaNameChooser(container)
    identifier = name_chooser.chooseName(
        identifier or filename, None, file=file, interface=interfaces.IAsset)
    try:
        name_chooser.checkName(identifier, None)
    except ContentError as e:
        raise ValueError(_(u"Please provide a unique id: ${reason}",
            mapping=dict(reason=e.reason)))
    context._setObject(identifier, Image(identifier))
    content = context._getOb(identifier)
    if title is not None:
        content.set_title(title)
    if file is not None:
        content.set_image(file)
    notify(ObjectCreatedEvent(content))
    return content
Beispiel #8
0
def image_factory(self, id, content_type, file):
    """Create an Image.
    """
    filename = None
    if hasattr(file, 'name'):
        filename = os.path.basename(file.name)
    name_chooser = ISilvaNameChooser(self)
    id = name_chooser.chooseName(id or filename, None,
        file=file, interface=interfaces.IAsset)
    try:
        name_chooser.checkName(id, None)
    except ContentError:
        return None

    img = Image(str(id)).__of__(self)
    return img
Beispiel #9
0
def image_factory(self, id, content_type, file):
    """Create an Image.
    """
    filename = None
    if hasattr(file, 'name'):
        filename = os.path.basename(file.name)
    name_chooser = ISilvaNameChooser(self)
    id = name_chooser.chooseName(id or filename,
                                 None,
                                 file=file,
                                 interface=interfaces.IAsset)
    try:
        name_chooser.checkName(id, None)
    except ContentError:
        return None

    img = Image(str(id)).__of__(self)
    return img
Beispiel #10
0
    def test_zope_name_chooser(self):
        """Test name chooser implementation for Zope contents. This is
        used when adding a Silva root.

        checkName should ContentError for invalids ids, return True
        for valid ones.
        """
        factory = self.root.manage_addProduct['OFS']
        factory.manage_addFolder('folder', 'Folder')

        chooser = ISilvaNameChooser(self.root.folder)
        self.assertTrue(verifyObject(ISilvaNameChooser, chooser))

        # checkName. services are valid inside a Zope folder
        self.assertTrue(chooser.checkName('valid_id', None))
        self.assertTrue(chooser.checkName('service_check', None))
        self.assertTrue(chooser.checkName('override.html', None))
        with self.assertRaises(ContentError):
            chooser.checkName('aq_parent', None)
        with self.assertRaises(ContentError):
            chooser.checkName('document__', None)
        with self.assertRaises(ContentError):
            chooser.checkName('__document', None)
Beispiel #11
0
    def renamer(self):
        any_renames = False

        data = yield
        while data is not None:
            content, to_identifier, to_title = data
            result = None

            # Rename identifier
            from_identifier = content.getId()
            if to_identifier is not None and from_identifier != to_identifier:
                result = self.__verify_moveable(content)
                if result is None:
                    try:
                        ISilvaNameChooser(self.context).checkName(
                            to_identifier, content)
                    except ContentError as e:
                        result = ContainerError(reason=e.reason,
                                                content=content)
                if result is None:
                    content = self.__move(content, self.context,
                                          from_identifier, to_identifier)
                    any_renames = True

            # Update title
            if to_title is not None:
                if not isinstance(to_title, str):
                    to_title = to_title.decode('utf-8')
                editable = content.get_editable()
                if editable is None:
                    if result is None:
                        result = ContentError(
                            _("There is no editable version to set the title on."
                              ), content)
                elif editable.get_title() != to_title:
                    try:
                        editable.set_title(to_title)
                    except ContentError as error:
                        result = error

            if result is None:
                result = content

            data = yield result

        if any_renames:
            notifyContainerModified(self.context)
    def test_zope_name_chooser(self):
        """Test name chooser implementation for Zope contents. This is
        used when adding a Silva root.

        checkName should ContentError for invalids ids, return True
        for valid ones.
        """
        factory = self.root.manage_addProduct['OFS']
        factory.manage_addFolder('folder', 'Folder')

        chooser = ISilvaNameChooser(self.root.folder)
        self.assertTrue(verifyObject(ISilvaNameChooser, chooser))

        # checkName. services are valid inside a Zope folder
        self.assertTrue(chooser.checkName('valid_id', None))
        self.assertTrue(chooser.checkName('service_check', None))
        self.assertTrue(chooser.checkName('override.html', None))
        with self.assertRaises(ContentError):
            chooser.checkName('aq_parent', None)
        with self.assertRaises(ContentError):
            chooser.checkName('document__', None)
        with self.assertRaises(ContentError):
            chooser.checkName('__document', None)
Beispiel #13
0
    def test_silva_name_chooser(self):
        """Test name chooser implementation for Silva contents.

        checkName should raise ContentErrror for invalid ids, return
        True for valid ones.
        """
        chooser = ISilvaNameChooser(self.root)
        self.assertTrue(verifyObject(ISilvaNameChooser, chooser))

        # simple case
        self.assertTrue(chooser.checkName('valid_id', None))
        # index is valid by default
        self.assertTrue(chooser.checkName('index', None))
        with self.assertRaises(ContentError):
            chooser.checkName('service_check', None)
        with self.assertRaises(ContentError):
            chooser.checkName('override.html', None)
        with self.assertRaises(ContentError):
            chooser.checkName('aq_parent', None)
        with self.assertRaises(ContentError):
            chooser.checkName('document__', None)
        with self.assertRaises(ContentError):
            chooser.checkName('__document', None)
        with self.assertRaises(ContentError):
            # index is not valid for folders
            chooser.checkName('index', None, interface=IFolder)
        with self.assertRaises(ContentError):
            # index is not valid for assets
            chooser.checkName('index', None, interface=IAsset)
    def test_silva_name_chooser(self):
        """Test name chooser implementation for Silva contents.

        checkName should raise ContentErrror for invalid ids, return
        True for valid ones.
        """
        chooser = ISilvaNameChooser(self.root)
        self.assertTrue(verifyObject(ISilvaNameChooser, chooser))

        # simple case
        self.assertTrue(chooser.checkName('valid_id', None))
        # index is valid by default
        self.assertTrue(chooser.checkName('index', None))
        with self.assertRaises(ContentError):
            chooser.checkName('service_check', None)
        with self.assertRaises(ContentError):
            chooser.checkName('override.html', None)
        with self.assertRaises(ContentError):
            chooser.checkName('aq_parent', None)
        with self.assertRaises(ContentError):
            chooser.checkName('document__', None)
        with self.assertRaises(ContentError):
            chooser.checkName('__document', None)
        with self.assertRaises(ContentError):
            # index is not valid for folders
            chooser.checkName('index', None, interface=IFolder)
        with self.assertRaises(ContentError):
            # index is not valid for assets
            chooser.checkName('index', None, interface=IAsset)