|
@@ -1,14 +1,14 @@
|
1
|
1
|
# -*- coding: utf-8 -*-
|
2
|
|
-import os
|
3
|
|
-import sys
|
4
|
2
|
import transaction
|
5
|
|
-
|
6
|
3
|
from pyramid.paster import (
|
7
|
4
|
get_appsettings,
|
8
|
5
|
setup_logging,
|
9
|
6
|
)
|
10
|
|
-from pyramid.scripts.common import parse_vars
|
11
|
7
|
|
|
8
|
+from tracim import CFG
|
|
9
|
+from tracim.fixtures import FixturesLoader
|
|
10
|
+from tracim.fixtures.users_and_groups import Base as BaseFixture
|
|
11
|
+from sqlalchemy.exc import IntegrityError
|
12
|
12
|
from tracim.command import AppContextCommand
|
13
|
13
|
from tracim.models.meta import DeclarativeBase
|
14
|
14
|
from tracim.models import (
|
|
@@ -24,9 +24,6 @@ class InitializeDBCommand(AppContextCommand):
|
24
|
24
|
def get_description(self):
|
25
|
25
|
return "Initialize DB"
|
26
|
26
|
|
27
|
|
- def get_epilog(self):
|
28
|
|
- return "################"
|
29
|
|
-
|
30
|
27
|
def get_parser(self, prog_name):
|
31
|
28
|
parser = super().get_parser(prog_name)
|
32
|
29
|
return parser
|
|
@@ -34,16 +31,34 @@ class InitializeDBCommand(AppContextCommand):
|
34
|
31
|
def take_action(self, parsed_args):
|
35
|
32
|
super(InitializeDBCommand, self).take_action(parsed_args)
|
36
|
33
|
config_uri = parsed_args.config_file
|
37
|
|
-
|
38
|
34
|
setup_logging(config_uri)
|
39
|
35
|
settings = get_appsettings(config_uri)
|
|
36
|
+ self._create_schema(settings)
|
|
37
|
+ self._populate_database(settings)
|
|
38
|
+
|
|
39
|
+ @classmethod
|
|
40
|
+ def _create_schema(cls, settings):
|
|
41
|
+ print("- Create Schemas of databases -")
|
40
|
42
|
engine = get_engine(settings)
|
41
|
43
|
DeclarativeBase.metadata.create_all(engine)
|
42
|
|
- session_factory = get_session_factory(engine)
|
43
|
44
|
|
|
45
|
+ @classmethod
|
|
46
|
+ def _populate_database(cls, settings):
|
|
47
|
+ engine = get_engine(settings)
|
|
48
|
+ session_factory = get_session_factory(engine)
|
|
49
|
+ app_config = CFG(settings)
|
|
50
|
+ print("- Populate database with default data -")
|
44
|
51
|
with transaction.manager:
|
45
|
|
- pass
|
46
|
|
- # dbsession = get_tm_session(session_factory, transaction.manager)
|
47
|
|
- # model = MyModel(name='one', value=1)
|
48
|
|
- # dbsession.add(model)
|
49
|
|
- # Add global manager data, just for test
|
|
52
|
+ dbsession = get_tm_session(session_factory, transaction.manager)
|
|
53
|
+ try:
|
|
54
|
+ fixtures_loader = FixturesLoader(dbsession, app_config)
|
|
55
|
+ fixtures_loader.loads([BaseFixture])
|
|
56
|
+ transaction.commit()
|
|
57
|
+ print("Database initialized.")
|
|
58
|
+ except IntegrityError:
|
|
59
|
+ print('Warning, there was a problem when adding default data'
|
|
60
|
+ ', it may have already been added:')
|
|
61
|
+ import traceback
|
|
62
|
+ print(traceback.format_exc())
|
|
63
|
+ transaction.abort()
|
|
64
|
+ print('Database initialization failed')
|