Merge branch 'master' into history_optimization

This commit is contained in:
Chase Sterling 2016-07-09 19:33:56 -04:00
commit fcb23466dd
4 changed files with 54 additions and 28 deletions

View file

@ -145,7 +145,7 @@ class Config(object):
def __init__(self): def __init__(self):
for k, v in self.read().iteritems(): for k, v in self.read().iteritems():
setattr(self, k, v) setattr(self, k, v)
if hasattr(self, 'AUTH_LOCAL_ENABLE'): if getattr(self, 'AUTH_LOCAL_ENABLE', True):
self.MODULES.append('auth.local') self.MODULES.append('auth.local')
if hasattr(self, 'OAUTH'): if hasattr(self, 'OAUTH'):
self.MODULES.append('auth.oauth') self.MODULES.append('auth.oauth')

View file

@ -7,7 +7,7 @@ def hook_func(name, fn):
@wraps(fn) @wraps(fn)
def wrapper(self, *args, **kwargs): def wrapper(self, *args, **kwargs):
for hook, a, kw in self.__class__._pre_hooks.get(name) or []: for hook, a, kw in self.__class__._pre_hooks.get(name) or []:
hook(*args, **kwargs) hook(self, *args, **kwargs)
rv = fn(self, *args, **kwargs) rv = fn(self, *args, **kwargs)
@ -15,7 +15,7 @@ def hook_func(name, fn):
kwargs.update(dict(rv=rv)) kwargs.update(dict(rv=rv))
for hook, a, kw in self.__class__._post_hooks.get(name) or []: for hook, a, kw in self.__class__._post_hooks.get(name) or []:
hook(*args, **kwargs) hook(self, *args, **kwargs)
return rv return rv
return wrapper return wrapper

View file

@ -1,35 +1,40 @@
from realms.modules.wiki.models import Wiki from realms.modules.wiki.models import WikiPage
from realms import search from realms import search
@Wiki.after('write_page') @WikiPage.after('write')
def wiki_write_page(name, content, message=None, username=None, email=None, **kwargs): def wiki_write_page(page, content, message=None, username=None, email=None, **kwargs):
if not hasattr(search, 'index_wiki'): if not hasattr(search, 'index_wiki'):
# using simple search or none # using simple search or none
return return
body = dict(name=name, body = dict(name=page.name,
content=content, content=content,
message=message, message=message,
email=email, email=email,
username=username) username=username)
return search.index_wiki(name, body) return search.index_wiki(page.name, body)
@Wiki.after('rename_page') @WikiPage.before('rename')
def wiki_rename_page(old_name, *args, **kwargs): def wiki_rename_page_del(page, *args, **kwargs):
if not hasattr(search, 'index_wiki'): if not hasattr(search, 'index_wiki'):
return return
return search.delete_wiki(old_name) return search.delete_wiki(page.name)
@Wiki.after('delete_page') @WikiPage.after('rename')
def wiki_delete_page(name, *args, **kwargs): def wiki_rename_page_add(page, new_name, *args, **kwargs):
wiki_write_page(page, page.data, *args, **kwargs)
@WikiPage.after('delete')
def wiki_delete_page(page, *args, **kwargs):
if not hasattr(search, 'index_wiki'): if not hasattr(search, 'index_wiki'):
return return
return search.delete_wiki(name) return search.delete_wiki(page.name)

View file

@ -42,6 +42,27 @@ class Wiki(HookMixin):
def __repr__(self): def __repr__(self):
return "Wiki: %s" % self.path return "Wiki: %s" % self.path
def commit(self, name, email, message, files):
"""Commit to the underlying git repo.
:param name: Committer name
:param email: Committer email
:param message: Commit message
:param files: list of file names that should be committed
:return:
"""
# Dulwich and gittle seem to want us to encode ourselves at the moment. see #152
if isinstance(name, unicode):
name = name.encode('utf-8')
if isinstance(email, unicode):
email = email.encode('utf-8')
if isinstance(message, unicode):
message = message.encode('utf-8')
return self.gittle.commit(name=name,
email=email,
message=message,
files=files)
def get_page(self, name, sha='HEAD'): def get_page(self, name, sha='HEAD'):
"""Get page data, partials, commit info. """Get page data, partials, commit info.
@ -71,7 +92,7 @@ class Wiki(HookMixin):
return rv return rv
class WikiPage(object): class WikiPage(HookMixin):
def __init__(self, name, wiki, sha='HEAD'): def __init__(self, name, wiki, sha='HEAD'):
self.name = name self.name = name
self.filename = cname_to_filename(name) self.filename = cname_to_filename(name)
@ -202,7 +223,7 @@ class WikiPage(object):
return username, email return username, email
def _clear_cache(self): def _clear_cache(self):
cache.delete_many(self._cache_key(p) for p in ['data', 'info']) cache.delete_many(*(self._cache_key(p) for p in ['data', 'info']))
def delete(self, username=None, email=None, message=None): def delete(self, username=None, email=None, message=None):
"""Delete page. """Delete page.
@ -219,10 +240,10 @@ class WikiPage(object):
# gittle.rm won't actually remove the file, have to do it ourselves # gittle.rm won't actually remove the file, have to do it ourselves
os.remove(os.path.join(self.wiki.path, self.filename)) os.remove(os.path.join(self.wiki.path, self.filename))
self.wiki.gittle.rm(self.filename) self.wiki.gittle.rm(self.filename)
commit = self.wiki.gittle.commit(name=username, commit = self.wiki.commit(name=username,
email=email, email=email,
message=message, message=message,
files=[self.filename]) files=[self.filename])
self._clear_cache() self._clear_cache()
return commit return commit
@ -256,10 +277,10 @@ class WikiPage(object):
self.wiki.gittle.add(new_filename) self.wiki.gittle.add(new_filename)
self.wiki.gittle.rm(old_filename) self.wiki.gittle.rm(old_filename)
commit = self.wiki.gittle.commit(name=username, commit = self.wiki.commit(name=username,
email=email, email=email,
message=message, message=message,
files=[old_filename, new_filename]) files=[old_filename, new_filename])
self._clear_cache() self._clear_cache()
self.name = new_name self.name = new_name
@ -296,10 +317,10 @@ class WikiPage(object):
username, email = self._get_user(username, email) username, email = self._get_user(username, email)
ret = self.wiki.gittle.commit(name=username, ret = self.wiki.commit(name=username,
email=email, email=email,
message=message, message=message,
files=[self.filename]) files=[self.filename])
self._clear_cache() self._clear_cache()
return ret return ret