Example #1
0
    def wrapper(*a, **ka):
        db.connect()
        db.execute_sql('PRAGMA journal_mode=WAL;')
        db.execute_sql('PRAGMA busy_timeout=30000;')

        start = clock()
        while 1:
            try:
                with db.transaction():
                    fn = func(*a, **ka)
            except LoggedException as e:
                db.rollback()
                raise exc_info()[0](e.msg)
            except DBError as e:
                db.rollback()
                raise LoggedException(error_text.format(e, request.url))
            except OperationalError as e:
                if clock() - start > DATABASE_TIMEOUT:
                    raise Exception('Database timeout', e)
                else:
                    # sleep(RETRY_INTERVAL)
                    continue
            else:
                # sleep(RETRY_INTERVAL * 3)
                break
        return fn
Example #2
0
    def wrapper(*a, **ka):
        db.connect()
        db.execute_sql('PRAGMA journal_mode=WAL;')
        db.execute_sql('PRAGMA busy_timeout=30000;')

        start = clock()
        while 1:
            try:
                with db.transaction():
                    fn = func(*a, **ka)
            except LoggedException as e:
                db.rollback()
                raise exc_info()[0](e.msg)
            except DBError as e:
                db.rollback()
                raise LoggedException(error_text.format(e, request.url))
            except OperationalError as e:
                if clock() - start > DATABASE_TIMEOUT:
                    raise Exception('Database timeout', e)
                else:
                    # sleep(RETRY_INTERVAL)
                    continue
            else:
                # sleep(RETRY_INTERVAL * 3)
                break
        return fn
Example #3
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()
Example #4
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()
Example #5
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
Example #6
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}
Example #7
0
from core.models import User, Request, db as brain_db
from telegram.TelegramFrontend import TgUser, db as tg_bot_db
from discord_.DiscordComponent import DiscordUser, GuildChannel, db as discord_bot_db

# connect actually happens in core.DJ_Brain file, and connects when imported
brain_db.connect(reuse_if_open=True)
brain_db.create_tables([User, Request])

tg_bot_db.connect(reuse_if_open=True)
tg_bot_db.create_tables([TgUser])

discord_bot_db.connect(reuse_if_open=True)
discord_bot_db.create_tables([DiscordUser, GuildChannel])
Example #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}