witten
/
luminotes
Archived
1
0
Fork 0
This repository has been archived on 2023-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
luminotes/tools/convert_blog_to_forum.py

131 lines
4.1 KiB
Python
Executable File

#!/usr/bin/python2.4
import os
import os.path
import sys
import cherrypy
from datetime import datetime
from controller.Database import Database
from model.Notebook import Notebook
from model.Note import Note
from model.User import User
from model.Tag import Tag
class Blog_converter( object ):
"""
Convert the Luminotes blog to be a forum, with one notebook thread per blog post.
"""
def __init__( self, database, settings, blog_username ):
self.database = database
self.settings = settings
self.blog_username = blog_username
self.blog_notebook = self.load_original_blog_notebook()
self.convert_posts_to_forum_threads()
self.delete_original_blog_notebook()
self.database.commit()
def load_original_blog_notebook( self ):
anonymous = self.database.select_one( User, User.sql_load_by_username( u"anonymous" ) )
from controller.Users import Users
users = Users(
self.database,
self.settings[ u"global" ].get( u"luminotes.http_url", u"" ),
self.settings[ u"global" ].get( u"luminotes.https_url", u"" ),
self.settings[ u"global" ].get( u"luminotes.support_email", u"" ),
self.settings[ u"global" ].get( u"luminotes.payment_email", u"" ),
self.settings[ u"global" ].get( u"luminotes.rate_plans", [] ),
self.settings[ u"global" ].get( u"luminotes.download_products", [] ),
)
result = users.current( anonymous.object_id )
blog_notebooks = [ nb for nb in result[ "notebooks" ] if nb.name == u"Luminotes blog" ]
return blog_notebooks[ 0 ]
def convert_posts_to_forum_threads( self ):
notes = self.database.select_many( Note, self.blog_notebook.sql_load_recent_notes( reverse = True, start = 0, count = 1000 ) )
for note in notes:
self.convert_post( note )
def convert_post( self, note ):
# create a notebook thread to go in the forum
notebook_id = self.database.next_id( Notebook, commit = False )
thread_notebook = Notebook.create(
notebook_id,
note.title,
)
self.database.save( thread_notebook, commit = False )
anonymous = self.database.select_one( User, User.sql_load_by_username( u"anonymous" ) )
# move the given note into the newly created notebook thread
note.notebook_id = notebook_id
note.startup = True
note.rank = 0
self.database.save( note, commit = False )
# load the forum tag
forum_tag = self.database.select_one( Tag, Tag.sql_load_by_name( u"forum", user_id = anonymous.object_id ) )
# associate the forum tag with the previously created notebook thread, and set that
# association's value to the forum name
self.database.execute(
anonymous.sql_save_notebook_tag( notebook_id, forum_tag.object_id, value = u"blog" ),
commit = False,
)
# give the anonymous user access to the new notebook thread
self.database.execute(
anonymous.sql_save_notebook( notebook_id, read_write = True, owner = False, own_notes_only = True ),
commit = False,
)
blog_user = self.database.select_one( User, User.sql_load_by_username( self.blog_username ) )
self.database.execute(
blog_user.sql_save_notebook( notebook_id, read_write = True, owner = True ),
commit = False,
)
def delete_original_blog_notebook( self ):
self.blog_notebook.deleted = True
self.database.save( self.blog_notebook, commit = False )
def main( args ):
import cherrypy
from config import Common
cherrypy.config.update( Common.settings )
desktop = False
if args and "-d" in args:
from config import Development
settings = Development.settings
args.remove( "-d" )
elif args and "-l" in args:
from config import Desktop
settings = Desktop.settings
desktop = True
args.remove( "-l" )
else:
from config import Production
settings = Production.settings
cherrypy.config.update( settings )
database = Database(
host = cherrypy.config.configMap[ u"global" ].get( u"luminotes.db_host" ),
ssl_mode = cherrypy.config.configMap[ u"global" ].get( u"luminotes.db_ssl_mode" ),
data_dir = ".",
)
ranker = Blog_converter( database, cherrypy.config.configMap, *args )
if __name__ == "__main__":
main( sys.argv[ 1: ] )