From: Radek Czajka Date: Mon, 7 Mar 2011 10:03:45 +0000 (+0100) Subject: work-in-progress X-Git-Url: https://git.mdrn.pl/redakcja.git/commitdiff_plain/7e94b10a9875ce8b4d7d109606cdac85b0ab831d?ds=sidebyside work-in-progress --- diff --git a/apps/dvcs/models.py b/apps/dvcs/models.py index 47e7c26d..18fe18fe 100644 --- a/apps/dvcs/models.py +++ b/apps/dvcs/models.py @@ -12,7 +12,7 @@ class Change(models.Model): Data contains a pickled diff needed to reproduce the initial document. """ - author = models.ForeignKey(User) + author = models.ForeignKey(User, null=True, blank=True) patch = models.TextField(blank=True) tree = models.ForeignKey('Document') @@ -35,6 +35,10 @@ class Change(models.Model): @staticmethod def make_patch(src, dst): + if isinstance(src, unicode): + src = src.encode('utf-8') + if isinstance(dst, unicode): + dst = dst.encode('utf-8') return pickle.dumps(mdiff.textdiff(src, dst)) def materialize(self): @@ -81,17 +85,13 @@ class Document(models.Model): """ File in repository. """ - creator = models.ForeignKey(User) + creator = models.ForeignKey(User, null=True, blank=True) head = models.ForeignKey(Change, null=True, blank=True, default=None, help_text=_("This document's current head.")) - # Some meta-data - name = models.CharField(max_length=200, - help_text=_("Name for this file to display.")) - def __unicode__(self): - return u"{0}, HEAD: {1}".format(self.name, self.head_id) + return u"{0}, HEAD: {1}".format(self.id, self.head_id) @models.permalink def get_absolute_url(self): diff --git a/apps/wiki/models.py b/apps/wiki/models.py index 7cb20c65..a3b952a0 100644 --- a/apps/wiki/models.py +++ b/apps/wiki/models.py @@ -4,110 +4,36 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from django.db import models -import re -import os -import vstorage -from vstorage import DocumentNotFound -from wiki import settings, constants -from slughifi import slughifi from django.utils.translation import ugettext_lazy as _ -from django.http import Http404 +from dvcs import models as dvcs_models + import logging logger = logging.getLogger("fnp.wiki") -# _PCHARS_DICT = dict(zip((ord(x) for x in u"ĄĆĘŁŃÓŚŻŹąćęłńóśżź "), u"ACELNOSZZacelnoszz_")) -_PCHARS_DICT = dict(zip((ord(x) for x in u" "), u"_")) - -# I know this is barbaric, but I didn't find a better solution ;( -def split_name(name): - parts = name.translate(_PCHARS_DICT).split('__') - return parts - -def join_name(*parts, **kwargs): - name = u'__'.join(p.translate(_PCHARS_DICT) for p in parts) - logger.info("JOIN %r -> %r", parts, name) - return name - -def normalize_name(name): - """ - >>> normalize_name("gąska".decode('utf-8')) - u'g\u0105ska' - """ - return unicode(name).translate(_PCHARS_DICT) - -STAGE_TAGS_RE = re.compile(r'^#stage-finished: (.*)$', re.MULTILINE) - - -class DocumentStorage(object): - def __init__(self, path): - self.vstorage = vstorage.VersionedStorage(path) - - def get(self, name, revision=None): - text, rev = self.vstorage.page_text(name, revision) - return Document(self, name=name, text=text, revision=rev) - - def get_by_tag(self, name, tag): - text, rev = self.vstorage.page_text_by_tag(name, tag) - return Document(self, name=name, text=text, revision=rev) +class Document(models.Model): + """ A document edited on the wiki """ - def revert(self, name, revision, **commit_args): - self.vstorage.revert(name, revision, **commit_args) + slug = models.CharField(_('slug')) + title = models.CharField(_('displayed title'), blank=True) + data = models.ForeignKey(dvcs_models.Document) + gallery = models.CharField(_('scan gallery name'), blank=True) - def get_or_404(self, *args, **kwargs): - try: - return self.get(*args, **kwargs) - except DocumentNotFound: - raise Http404 - def put(self, document, author, comment, parent=None): - self.vstorage.save_text( - title=document.name, - text=document.text, - author=author, - comment=comment, - parent=parent) - return document - def create_document(self, text, name): - title = u', '.join(p.title() for p in split_name(name)) - - if text is None: - text = u'' - - document = Document(self, name=name, text=text, title=title) - return self.put(document, u"", u"Document created.") - - def delete(self, name, author, comment): - self.vstorage.delete_page(name, author, comment) - - def all(self): - return list(self.vstorage.all_pages()) - - def history(self, title): - def stage_desc(match): - stage = match.group(1) - return _("Finished stage: %s") % constants.DOCUMENT_STAGES_DICT[stage] +''' +from wiki import settings, constants +from slughifi import slughifi - for changeset in self.vstorage.page_history(title): - changeset['description'] = STAGE_TAGS_RE.sub(stage_desc, changeset['description']) - yield changeset +from django.http import Http404 - def doc_meta(self, title, revision=None): - return self.vstorage.page_meta(title, revision) class Document(object): - META_REGEX = re.compile(r'\s*', re.DOTALL | re.MULTILINE) - - def __init__(self, storage, **kwargs): - self.storage = storage - for attr, value in kwargs.iteritems(): - setattr(self, attr, value) def add_tag(self, tag, revision, author): """ Add document specific tag """ @@ -141,13 +67,9 @@ class Document(object): def info(self): return self.storage.vstorage.page_meta(self.name, self.revision) -def getstorage(): - return DocumentStorage(settings.REPOSITORY_PATH) -# -# Django models -# +''' class Theme(models.Model): name = models.CharField(_('name'), max_length=50, unique=True) diff --git a/apps/wiki/settings.py b/apps/wiki/settings.py index 0a227e4a..50f49d8b 100644 --- a/apps/wiki/settings.py +++ b/apps/wiki/settings.py @@ -1,7 +1,3 @@ from django.conf import settings -if not hasattr(settings, 'WIKI_REPOSITORY_PATH'): - raise Exception('You must set WIKI_REPOSITORY_PATH in your settings file.') - -REPOSITORY_PATH = settings.WIKI_REPOSITORY_PATH GALLERY_URL = settings.MEDIA_URL + 'images/'