예제 #1
0
파일: load.py 프로젝트: apenwarr/ekb
def _load_docs():
    seen = {}
    
    titlemap = {}
    for doc in Doc.search():
        if not os.path.exists(os.path.join(DOCDIR, doc.pathname)):
            print 'Deleting old document: %r %r' % (DOCDIR, doc.pathname)
            doc.delete()
        else:
            titlemap[doc.title] = doc
            
    print 'Loading all from "%s"' % DOCDIR
    for (dirpath, dirnames, filenames) in os.walk(DOCDIR):
        assert(dirpath.startswith(DOCDIR))
        for basename in filenames:
            fullpath = os.path.join(dirpath, basename)
            dirfile = fullpath[len(DOCDIR):]
            if (basename[-1] == '~' 
                or basename[0] == '.' or fullpath.find('/.') >= 0
                or basename=='Makefile'):
                   continue
            echo("  %s" % fullpath)

            if basename in seen:
                raise KeyError('Duplicate basename "%s"' % basename)
            seen[basename] = 1
                
            title = basename

            (title, tags, mtime, text) = parse_doc(dirfile)
            print " (tags=%s)" % repr(tags)

            while title in titlemap and titlemap[title].filename != basename:
                print ('WARNING: Duplicate title:\n  "%s"\n  "%s"'
                       % (basename, titlemap[title].filename))
                title += " [duplicate]"

            d = Doc.create(basename, dirfile, title)
            titlemap[title] = d
            d.use_latest()  # FIXME: lame: this parses a second time
            d.title = title
            d.save()
예제 #2
0
파일: views.py 프로젝트: eduardok/ekb
def save(req, id, docname):
    if not req.POST:
        return HttpResponse('Error: you must use POST to save pages.',
                            status=500)
    while docname.startswith('/'):
        docname = docname[1:]
    title = req.REQUEST.get('title-text', 'Untitled').replace('\n', ' ')
    tags  = req.REQUEST.get('tags-text', '').replace('\n', ' ')
    text  = req.REQUEST.get('markdown-text', '').strip()

    docid = atoi(id)
    if docid:
        doc = Doc.try_get(id=docid)
    else:
        doc = Doc.create(docname, docname, title)
                         
    if not doc:
        raise Http404("Document #%d (%s) does not exist." % (docid, id))
    redir_url = doc.get_url()  # this function is uncallable after delete()
    if not text:
        _try_delete(doc)
    else:
        xtitle = title
        di = 0
        while 1:
            if di > 1:
                xtitle = '%s [dup#%d]' % (title, di)
            elif di == 1:
                xtitle = '%s [dup]' % title
            try:
                _try_save(doc, xtitle, tags, text)
            except IntegrityError:
                if di < 16:
                    di += 1
                    continue
                else:
                    raise
            break
    return HttpResponseRedirect(redir_url)