Skip to content

Commit

Permalink
#2429: shows versioned wiki page and the versioned tags
Browse files Browse the repository at this point in the history
  • Loading branch information
jun66j5 committed Nov 6, 2013
1 parent 58bf794 commit f41d59c
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 19 deletions.
10 changes: 5 additions & 5 deletions tractags/api.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ def get_all_tags(req, filter=None):
""" """


def get_resource_tags(req, resource): def get_resource_tags(req, resource, when=None):
"""Get tags for a Resource object.""" """Get tags for a Resource object."""


def set_resource_tags(req, resource, tags, comment=u''): def set_resource_tags(req, resource, tags, comment=u''):
Expand Down Expand Up @@ -281,11 +281,11 @@ def get_all_tags(self, req, filter=None):
all_tags[tag] = count all_tags[tag] = count
return all_tags return all_tags


def get_resource_tags(self, req, resource): def get_resource_tags(self, req, resource, when=None):
assert resource.realm == self.realm assert resource.realm == self.realm
if not self.check_permission(req.perm(resource), 'view'): if not self.check_permission(req.perm(resource), 'view'):
return return
return resource_tags(self.env, resource) return resource_tags(self.env, resource, when=when)


def set_resource_tags(self, req, resource, tags, comment=u''): def set_resource_tags(self, req, resource, tags, comment=u''):
assert resource.realm == self.realm assert resource.realm == self.realm
Expand Down Expand Up @@ -390,10 +390,10 @@ def get_all_tags(self, req, realms=[]):
all_tags.update(tags) all_tags.update(tags)
return all_tags return all_tags


def get_tags(self, req, resource): def get_tags(self, req, resource, when=None):
"""Get tags for resource.""" """Get tags for resource."""
return set(self._get_provider(resource.realm) \ return set(self._get_provider(resource.realm) \
.get_resource_tags(req, resource)) .get_resource_tags(req, resource, when=when))


def set_tags(self, req, resource, tags, comment=u''): def set_tags(self, req, resource, tags, comment=u''):
"""Set tags on a resource. """Set tags on a resource.
Expand Down
32 changes: 22 additions & 10 deletions tractags/model.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -175,19 +175,31 @@ def tagged_resources(env, perm_check, perm, realm, tags=None, filter=None,
resource = resources[name] resource = resources[name]
yield resource, set([tag[1] for tag in tags]) yield resource, set([tag[1] for tag in tags])


def resource_tags(env, resource, db=None): def resource_tags(env, resource, db=None, when=None):
"""Return all tags for a Trac resource by realm and ID.""" """Return all tags for a Trac resource by realm and ID."""
db = _get_db(env, db) db = _get_db(env, db)
cursor = db.cursor() cursor = db.cursor()

id = to_unicode(resource.id)
cursor.execute(""" if when is None:
SELECT tag cursor.execute("""
FROM tags SELECT tag
WHERE tagspace=%s FROM tags
AND name=%s WHERE tagspace=%s
""", (resource.realm, to_unicode(resource.id))) AND name=%s
for row in cursor: """, (resource.realm, id))
yield row[0] for row in cursor:
yield row[0]
else:
if isinstance(when, datetime):
when = to_utimestamp(when)
cursor.execute("SELECT newtags FROM tags_change "
"WHERE tagspace=%s AND name=%s AND time<=%s "
"ORDER BY time DESC LIMIT 1",
(resource.realm, id, when))
row = cursor.fetchone()
if row:
for tag in filter(None, row[0].split()):
yield tag


# Internal functions # Internal functions


Expand Down
16 changes: 12 additions & 4 deletions tractags/wiki.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@


from tractags.api import Counter, DefaultTagProvider, TagSystem, _, ngettext, \ from tractags.api import Counter, DefaultTagProvider, TagSystem, _, ngettext, \
tag_ tag_
from tractags.compat import to_utimestamp
from tractags.macros import TagTemplateProvider from tractags.macros import TagTemplateProvider
from tractags.model import delete_tags, tag_changes from tractags.model import delete_tags, tag_changes
from tractags.query import Query from tractags.query import Query
Expand Down Expand Up @@ -134,11 +135,13 @@ def post_process_request(self, req, template, data, content_type):
"%(tags)s removed", "%(tags)s removed",
len(removed)), len(removed)),
tags=tag.em(', '.join(removed)))) tags=tag.em(', '.join(removed))))
date = tags_history[0][0]
history.append({ history.append({
'version': '*', 'version': '*',
'url': req.href(resource.realm, resource.id, 'url': req.href(resource.realm, resource.id,
version=page_history[i]['version']), version=page_history[i]['version'],
'date': tags_history[0][0], tags_version=to_utimestamp(date)),
'date': date,
'author': tags_history[0][1], 'author': tags_history[0][1],
'comment': comment, 'comment': comment,
'ipnr': '' 'ipnr': ''
Expand Down Expand Up @@ -217,10 +220,15 @@ def wiki_page_version_deleted(self, page):
# Internal methods # Internal methods
def _page_tags(self, req): def _page_tags(self, req):
pagename = req.args.get('page', 'WikiStart') pagename = req.args.get('page', 'WikiStart')
version = req.args.get('version')
tags_version = req.args.get('tags_version')


page = WikiPage(self.env, pagename, version=version)
resource = page.resource
if version and not tags_version:
tags_version = page.time
tag_system = TagSystem(self.env) tag_system = TagSystem(self.env)
resource = Resource('wiki', pagename) tags = sorted(tag_system.get_tags(req, resource, when=tags_version))
tags = sorted(tag_system.get_tags(req, resource))
return tags return tags


def _wiki_view(self, req, stream): def _wiki_view(self, req, stream):
Expand Down

1 comment on commit f41d59c

@hasienda
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works well according to my own tests. Good to go with it.

Please sign in to comment.