def get_history(self, path='/'): repo = BzrAccess(self.repo_path) contents = repo.log(path) for obj in contents: timestamp = obj['fields']['timestamp'] from wsgiref.handlers import format_date_time obj['fields']['timestamp'] = \ format_date_time(timestamp) return contents
def get_history(self, path='/'): repo = BzrAccess(self.repo_path) contents = repo.log(path) for obj in contents: timestamp = obj['fields']['timestamp'] import datetime obj['fields']['timestamp'] = \ datetime.datetime.fromtimestamp(timestamp) return contents
def latest_change(self, path=""): # @@todo: optimize this: only need to fetch one, not all repo = BzrAccess(self.repo_path) try: contents = repo.log(path) except sven.NoSuchResource: return None for obj in contents: timestamp = obj['fields']['timestamp'] import datetime obj['fields']['timestamp'] = \ datetime.datetime.fromtimestamp(timestamp) return contents[0]['fields']
f = zipfile.read(path) fp = open(os.path.join(tempdir, *parts[2:]), 'w') try: fp.write(f) finally: fp.close() from sven.bzr import BzrAccess bzr = BzrAccess(tempdir) from DateTime import DateTime repo = getToolByName(project, 'portal_repository') archivist = getToolByName(project, 'portal_archivist') PAGES = set() for revision in reversed(bzr.log("/")): path = revision['href'] timestamp = revision['fields']['timestamp'] mod_date = DateTime(timestamp) user_id = revision['fields']['author'] commit_message = revision['fields']['message'] if isinstance(commit_message, unicode): commit_message = commit_message.encode("utf8") content = bzr.read(path, rev=revision['fields']['version']) print "Saving %s, revision %s" % (path, revision['fields']['version']) try: page_ctx = project[path] except KeyError: title = path.replace("-", " ").title() project.invokeFactory("Document", id=path, title=title)
def main(app, zipfile, project): user = app.acl_users.getUser('admin') print "Changing stuff as user", user newSecurityManager(None, user) app = makerequest(app) project = app.openplans.projects[project] proj_id = project.getId() zipfile = ZipFile(zipfile) import tempfile tempdir = tempfile.mkdtemp(prefix="--opencore-wiki-import-") wiki_filename_map = {} import simplejson for path in zipfile.namelist(): parts = path.split("/") if parts[-1] == "wiki_history_filenames.json": f = zipfile.read(path) wiki_filename_map = simplejson.loads(f) from pprint import pprint pprint(wiki_filename_map) continue if len(parts) < 2: continue if parts[1] == "wiki_history": if path.endswith("/"): try: os.makedirs(os.path.join(tempdir, *parts[2:])) except: pass continue else: try: os.makedirs(os.path.join(tempdir, *parts[2:-1])) except: pass f = zipfile.read(path) fp = open(os.path.join(tempdir, *parts[2:]), 'w') try: fp.write(f) finally: fp.close() from sven.bzr import BzrAccess bzr = BzrAccess(tempdir) from DateTime import DateTime repo = getToolByName(project, 'portal_repository') archivist = getToolByName(project, 'portal_archivist') PAGES = set() i = 0 for revision in reversed(bzr.log("/")): i += 1 fs_path = revision['href'] path = wiki_filename_map.get(fs_path, {}).get('filename', fs_path) timestamp = revision['fields']['timestamp'] mod_date = DateTime(timestamp) user_id = revision['fields']['author'] commit_message = revision['fields']['message'] if isinstance(commit_message, unicode): commit_message = commit_message.encode("utf8") content = bzr.read(path, rev=revision['fields']['version']) print "Saving %s, revision %s" % (path, revision['fields']['version']) try: page_ctx = project[path] except KeyError: title = wiki_filename_map.get(fs_path, {}).get('title', fs_path) project.invokeFactory("Document", id=path, title=title) page_ctx = project[path] PAGES.add(path) page_ctx.getField("modification_date").set(page_ctx, mod_date) from lxml.html import fromstring, tostring try: content = tostring(fromstring(content.decode("utf8"))) except: content = '' page_ctx.setText(content) ## if all goes well this will set lastModifiedAuthor from opencore.project.browser.metadata import _update_last_modified_author _update_last_modified_author(page_ctx, user_id) sys_metadata = repo._prepareSysMetadata(commit_message) sys_metadata['timestamp'] = mod_date.timeTime() prep = archivist.prepare(page_ctx, {}, sys_metadata) prep.metadata['sys_metadata']['principal'] = user_id archivist.save(prep, autoregister=repo.autoapply) prep.copyVersionIdFromClone() if i % 500 == 0: transaction.get().commit(True) attachment_metadata = json.loads(zipfile.read("%s/attachments.json" % proj_id)) from StringIO import StringIO plone_utils = getToolByName(project, 'plone_utils') for path in zipfile.namelist(): parts = path.split("/") if len(parts) < 2: continue if parts[1] == "pages": if len(parts) < 4 or parts[3] == '': continue metadata = attachment_metadata[path] page = parts[2] filename = parts[3] file = StringIO(zipfile.read(path)) fileId = filename context = project[page] try: context.invokeFactory(id=fileId, type_name="FileAttachment") except KeyError: print "***** Mysterious key error when creating file attachment %s in %s/%s" % (fileId, proj_id, page) continue object = context._getOb(fileId, None) object.setTitle(metadata['title'] or fileId) object.setFile(file) creation_date = DateTime(metadata['creation_date']) object.Schema()['creators'].set(object, (metadata['creator'],)) object.getField("creation_date").set(object, creation_date) object.getField("modification_date").set(object, creation_date) # @@TODO this is getting overwritten with the current date :-( object.setModificationDate(creation_date) object.reindexObject() from opencore.nui.wiki.utils import cache_history for page in PAGES: cache_history(project[page], repo) import shutil shutil.rmtree(tempdir)