예제 #1
0
파일: test_text.py 프로젝트: lerouxb/ni
def test_slugify():
    text = u'a slug to b\xeb!' # compose "e
    assert slugify(text) == 'a-slug-to-be'
예제 #2
0
파일: workspace.py 프로젝트: lerouxb/ni
 def get_slug(self):
     return slugify(self.name)
예제 #3
0
    def validate(self, workspace=None):
        errors = []

        # can we just assume this is ascii/utf8?
        name = self.name_entry.get_text().decode("utf8")
        dirpath = self.dir_entry.get_text().decode("utf8")
        slug = slugify(name)

        if not name:
            errors.append("Name is required.")
        elif workspace and slug != workspace.slug:
            if any((w.slug == slug for w in self.editor.workspaces)):
                errors.append("Name must be unique.")

        if not dirpath:
            errors.append("Root Directory is required.")
        elif not (os.path.exists(dirpath) and os.path.isdir(dirpath)):
            errors.append("Root Directory is not a valid directory.")

        m = self.glob_exclude_liststore
        i = m.get_iter_first()
        while i:
            next = m.iter_next(i)
            pattern = m.get_value(i, 0)
            if not pattern:
                m.remove(i)  # just delete empty ones
            i = next

        m = self.regex_exclude_liststore
        i = m.get_iter_first()
        while i:
            next = m.iter_next(i)
            pattern = m.get_value(i, 0)
            if not pattern:
                m.remove(i)  # just delete empty ones
            try:
                re.compile(pattern)
            except:
                err = "'%s' is not a valid regular expression." % (pattern,)
                errors.append(err)
            i = next

        filter_names = {}

        m = self.glob_filter_liststore
        i = m.get_iter_first()
        while i:
            next = m.iter_next(i)
            name = m.get_value(i, 0)
            pattern = m.get_value(i, 1)
            if not (name and pattern):
                m.remove(i)  # just delete empty ones
            filter_names[name] = filter_names.get(name, 0) + 1
            i = next

        m = self.regex_filter_liststore
        i = m.get_iter_first()
        while i:
            next = m.iter_next(i)
            name = m.get_value(i, 0)
            pattern = m.get_value(i, 1)
            if not (name and pattern):
                m.remove(i)  # just delete empty ones
            try:
                re.compile(pattern)
            except:
                err = "'%s' is not a valid regular expression." % (pattern,)
                errors.append(err)
            filter_names[name] = filter_names.get(name, 0) + 1
            i = next

        for name, count in filter_names.iteritems():
            if count > 1:
                err = "'%s' is used as a filter name multiple times." % (name,)
                errors.append(err)

        if errors:
            dialog = gtk.MessageDialog(
                self.editor.window,
                gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
                gtk.MESSAGE_ERROR,
                gtk.BUTTONS_OK,
                "\n".join(errors),
            )
            response = dialog.run()
            try:
                dialog.destroy()
            except AttributeError:
                pass

            return False

        else:
            return True