Beispiel #1
0
def recreate_database():

    from core.models import (db, User, Site, Blog, Page, PageCategory,
                             KeyValue, Tag, TagAssociation, Category, Theme,
                             Template, TemplateRevision, TemplateMapping,
                             Media, FileInfo, Queue, Permission,
                             MediaAssociation, PageRevision, FileInfoContext,
                             Plugin, Log, PluginData, ThemeData)

    db.connect()

    with db.atomic():

        db.drop_tables((User, Site, Blog, Page, PageCategory, KeyValue, Tag,
                        TagAssociation, Category, Theme, Template,
                        TemplateRevision, TemplateMapping, Media, FileInfo,
                        Queue, Permission, MediaAssociation, PageRevision,
                        FileInfoContext, Plugin, Log, PluginData, ThemeData),
                       safe=True)

        db.create_tables((User, Site, Blog, Page, PageCategory, KeyValue, Tag,
                          TagAssociation, Category, Theme, Template,
                          TemplateRevision, TemplateMapping, Media, FileInfo,
                          Queue, Permission, MediaAssociation, PageRevision,
                          FileInfoContext, Plugin, Log, PluginData, ThemeData),
                         safe=False)

        settings.DB.create_index_table()

        db.execute_sql(settings.DB.post_recreate())

    db.close()
Beispiel #2
0
def recreate_database():

	from core.models import (db, User, Site, Blog, Page, PageCategory,
		KeyValue, Tag, TagAssociation, Category,
		Theme, Template, TemplateRevision, TemplateMapping, Media, FileInfo,
		Queue, Permission, MediaAssociation, PageRevision, FileInfoContext, Plugin, Log, PluginData,
		ThemeData)

	db.connect()

	with db.atomic():

		db.drop_tables((User, Site, Blog, Page, PageCategory,
			KeyValue, Tag, TagAssociation, Category,
			Theme, Template, TemplateRevision, TemplateMapping, Media, FileInfo,
			Queue, Permission, MediaAssociation, PageRevision, FileInfoContext, Plugin, Log, PluginData,
			ThemeData),
			safe=True)

		db.create_tables((User, Site, Blog, Page, PageCategory,
			KeyValue, Tag, TagAssociation, Category,
			Theme, Template, TemplateRevision, TemplateMapping, Media, FileInfo,
			Queue, Permission, MediaAssociation, PageRevision, FileInfoContext, Plugin, Log, PluginData,
			ThemeData),
			safe=False)

		settings.DB.create_index_table()

		db.execute_sql(settings.DB.post_recreate())

	db.close()
Beispiel #3
0
 def wrapper(*a, **ka):
     db.connect()
     try:
         with db.atomic():
             fn = func(*a, **ka)
     except LoggedException as e:
         raise exc_info()[0](e.msg)
     except DBError as e:
         raise LoggedException(error_text.format(e, request.url))
     db.close()
     return fn
Beispiel #4
0
def backup_db(filename='database-backup.cgi'):
    '''
    Copy database file to backup (for SQLite only)
    TODO: make this a db-level method
    '''
    try:
        db.close()
    except AttributeError:
        pass
    import shutil
    from settings import DATA_FILE_PATH, FULL_SQLITE_DATABASE_PATH
    backup_path = os.path.join(APPLICATION_PATH + DATA_FILE_PATH , filename)

    with open(FULL_SQLITE_DATABASE_PATH, 'rb') as sourcefile, open(backup_path, 'wb') as destfile:
        shutil.copyfileobj(sourcefile, destfile, length=-1)

    return "Backed up"
Beispiel #5
0
def backup_db(filename='database-backup.cgi'):
    '''
    Copy database file to backup (for SQLite only)
    TODO: make this a db-level method
    '''
    try:
        db.close()
    except AttributeError:
        pass
    import shutil
    from settings import DATA_FILE_PATH, FULL_SQLITE_DATABASE_PATH
    backup_path = os.path.join(APPLICATION_PATH + DATA_FILE_PATH, filename)

    with open(FULL_SQLITE_DATABASE_PATH,
              'rb') as sourcefile, open(backup_path, 'wb') as destfile:
        shutil.copyfileobj(sourcefile, destfile, length=-1)

    return "Backed up"
Beispiel #6
0
def recreate_database():

    db.close()

    try:
        os.remove(settings.FULL_SQLITE_DATABASE_PATH)
    except FileNotFoundError:
        pass

    try:
        os.mkdir(settings.APPLICATION_PATH + settings._sep +
                 settings.DATA_FILE_PATH)
    except OSError as e:
        import errno
        if e.errno == errno.EEXIST:
            pass
        else:
            raise e

    init_db.recreate_database()
Beispiel #7
0
def step_4_pre():

    if get_ini('main', 'DO_DB_CHECK') is None:
        store_ini('main', 'DO_DB_CHECK', 'Y')
        from core.utils import reboot
        reboot()

    report = []

    from core.models import db, Template
    try:
        db.connect()
    except:
        raise

    db.close()

    report.append("Database connection successful.")

    from settings import DB
    DB.recreate_database()

    report.append("Database tables created successfully.")

    username = "******"
    email = get_ini("user", "email")
    password = get_ini("user", "password")
    blog_path = get_ini("install", "blog_path")

    from core.utils import encrypt_password
    p_key = get_ini('key', 'PASSWORD_KEY')
    password = encrypt_password(password, p_key)

    db.connect()

    with db.atomic():

        from core.models import Site
        new_site = Site.create(
            name="Your first site",
            description="The description for your first site.",
            url=get_ini('main', 'base_url_root'),
            path=blog_path)

        report.append("Initial site created successfully.")

        from core.models import User
        new_user = User(name='Administrator',
                        email=email,
                        encrypted_password=password)

        new_user.save_pwd()

        from core.auth import role

        new_user_permissions = new_user.add_permission(
            permission=role.SYS_ADMIN, site=new_site)

        new_user_permissions.save()

        report.append("Initial admin user created successfully.")

        plugindir = _join((_s.APPLICATION_PATH, 'data', 'plugins'))

        import shutil

        # TODO: warn on doing this?
        # this should only happen with a totally fresh install, not an upgrade

        install_directory = _join((_s.APPLICATION_PATH, _s.INSTALL_SRC_PATH))

        if (os.path.isdir(plugindir)):
            shutil.rmtree(plugindir)

        shutil.copytree(_join((install_directory, 'plugins')), plugindir)

        report.append("Default plugins copied successfully to data directory.")

        themedir = _join((_s.APPLICATION_PATH, 'data', 'themes'))

        if (os.path.isdir(themedir)):
            shutil.rmtree(themedir)

        shutil.copytree(_join((install_directory, 'themes')), themedir)

        report.append("Default themes copied successfully to data directory.")

        from core import plugins

        for x in os.listdir(plugindir):
            if (os.path.isdir(_join((plugindir, x))) is True
                    and x != '__pycache__'):
                new_plugin = plugins.register_plugin(x, enable=True)
                report.append("New plugin '{}' installed successfully.".format(
                    new_plugin.name))

        from settings.defaults import DEFAULT_THEME
        from core.models import Theme
        new_theme = Theme.install_to_system(DEFAULT_THEME)

        report.append(
            "Default theme created and installed successfully to system.")

        from core.models import Blog

        new_blog = Blog(site=new_site,
                        name="Your first blog",
                        description="The description for your first blog.",
                        url=new_site.url,
                        path=new_site.path,
                        local_path=new_site.path,
                        theme=new_theme)

        # TODO: add blog-level permission for new user as well

        new_blog.setup(new_user, new_theme)

        # TODO: Add default post

        report.append("Initial blog created successfully with default theme.")

    db.close()

    output_file_name = _join(
        (_s.APPLICATION_PATH + _s.DATA_FILE_PATH, _s.INI_FILE_NAME))

    config_parser = ConfigParser()

    sections = ('db', 'path', 'key')

    for s in sections:
        for name, value in parser.items(s):
            try:
                config_parser.add_section(s)
            except DuplicateSectionError:
                pass
            config_parser.set(s, name, value)


#     if request.environ['HTTP_HOST'] == _s.DEFAULT_LOCAL_ADDRESS + _s.DEFAULT_LOCAL_PORT:
#         config_parser.add_section('server')
#         config_parser.set('server', 'DESKTOP_MODE', 'True')

    try:
        with open(output_file_name, "w", encoding='utf-8') as output_file:
            config_parser.write(output_file)
    except BaseException as e:
        raise SetupError(str(e.__class__.__name__) + ": " + str(e))

    try:
        os.remove(config_file_name)
    except OSError as e:
        from core.error import not_found
        if not_found(e) is False:
            raise e
    except Exception as e:
        raise e

    finished = '''
    <p>Installation is complete. <a href="{}">Return to the main page to begin using the application.</a>
    <script>
    $.get('/reboot',function(data){{}});
    </script>
    '''.format(_s.BASE_URL)

    return {'report': report, 'finished': finished}
Beispiel #8
0
def step_4_pre():

    if get_ini('main', 'DO_DB_CHECK') is None:
        store_ini('main', 'DO_DB_CHECK', 'Y')
        from core.utils import reboot
        reboot()

    report = []

    from core.models import db, Template
    try:
        db.connect()
    except:
        raise

    db.close()

    report.append("Database connection successful.")

    from settings import DB
    DB.recreate_database()

    report.append("Database tables created successfully.")

    username = "******"
    email = get_ini("user", "email")
    password = get_ini("user", "password")
    blog_path = get_ini("install", "blog_path")

    from core.utils import encrypt_password
    p_key = get_ini('key', 'PASSWORD_KEY')
    password = encrypt_password(password, p_key)

    db.connect()

    with db.atomic():

        from core.models import Site
        new_site = Site.create(
            name="Your first site",
            description="The description for your first site.",
            url=get_ini('main', 'base_url_root'),
            path=blog_path)

        report.append("Initial site created successfully.")

        from core.models import User
        new_user = User(
            name='Administrator',
            email=email,
            encrypted_password=password)

        new_user.save_pwd()

        from core.auth import role

        new_user_permissions = new_user.add_permission(
            permission=role.SYS_ADMIN,
            site=new_site
            )

        new_user_permissions.save()

        report.append("Initial admin user created successfully.")

        plugindir = _join((_s.APPLICATION_PATH, 'data', 'plugins'))

        import shutil

        # TODO: warn on doing this?
        # this should only happen with a totally fresh install, not an upgrade

        install_directory = _join((_s.APPLICATION_PATH, _s.INSTALL_SRC_PATH))

        if (os.path.isdir(plugindir)):
            shutil.rmtree(plugindir)

        shutil.copytree(_join((install_directory, 'plugins')),
            plugindir)

        report.append("Default plugins copied successfully to data directory.")

        themedir = _join((_s.APPLICATION_PATH, 'data', 'themes'))

        if (os.path.isdir(themedir)):
            shutil.rmtree(themedir)

        shutil.copytree(_join((install_directory, 'themes')),
            themedir)

        report.append("Default themes copied successfully to data directory.")

        from core import plugins

        for x in os.listdir(plugindir):
            if (os.path.isdir(_join((plugindir, x))) is True and
                x != '__pycache__'):
                new_plugin = plugins.register_plugin(x, enable=True)
                report.append("New plugin '{}' installed successfully.".format(
                    new_plugin.name))

        from settings.defaults import DEFAULT_THEME
        from core.models import Theme
        new_theme = Theme.install_to_system(DEFAULT_THEME)

        report.append("Default theme created and installed successfully to system.")

        from core.models import Blog

        new_blog = Blog(
            site=new_site,
            name="Your first blog",
            description="The description for your first blog.",
            url=new_site.url,
            path=new_site.path,
            local_path=new_site.path,
            theme=new_theme
            )

        # TODO: add blog-level permission for new user as well

        new_blog.setup(new_user, new_theme)

        # TODO: Add default post

        report.append("Initial blog created successfully with default theme.")

    db.close()

    output_file_name = _join((_s.APPLICATION_PATH + _s.DATA_FILE_PATH, _s.INI_FILE_NAME))

    config_parser = ConfigParser()

    sections = ('db', 'path', 'key')

    for s in sections:
        for name, value in parser.items(s):
            try:
                config_parser.add_section(s)
            except DuplicateSectionError:
                pass
            config_parser.set(s, name, value)

#     if request.environ['HTTP_HOST'] == _s.DEFAULT_LOCAL_ADDRESS + _s.DEFAULT_LOCAL_PORT:
#         config_parser.add_section('server')
#         config_parser.set('server', 'DESKTOP_MODE', 'True')

    try:
        with open(output_file_name, "w", encoding='utf-8') as output_file:
            config_parser.write(output_file)
    except BaseException as e:
        raise SetupError(str(e.__class__.__name__) + ": " + str(e))

    try:
        os.remove(config_file_name)
    except OSError as e:
        from core.error import not_found
        if not_found(e) is False:
            raise e
    except Exception as e:
        raise e

    finished = '''
    <p>Installation is complete. <a href="{}">Return to the main page to begin using the application.</a>
    <script>
    $.get('/reboot',function(data){{}});
    </script>
    '''.format(_s.BASE_URL)

    return {'report':report,
        'finished':finished}