LocalDB_create   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
eloc 38
dl 0
loc 79
rs 10
c 0
b 0
f 0

1 Function

Rating   Name   Duplication   Size   Complexity  
B LocalDBCreate() 0 62 8
1
#This file create a SQLite local database for CNBP requirement.
2
#Creation: 2018-07-11T160228EST
3
#Author: Yang Ding
4
5
import sys
6
import os
7
import sqlite3
8
import logging
9
from pathlib import Path
10
from LocalDB_schema import *
11
import argparse
12
import getpass
13
14
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
15
logger = logging.getLogger('LocalDBCreate')
16
17
def LocalDBCreate(PathString, TableName, KeyFieldString, ColumnsNameTypeList):
18
    """
19
    Create the local database based on sceham.
20
    :param PathString:
21
    :param TableName:
22
    :param KeyFieldString:
23
    :param ColumnsNameTypeList:
24
    :return:
25
    """
26
27
28
    # if SQL already exist, quit script.
29
    SQLPath = Path(PathString)
30
31
    # check if path is a fiela nd exist.
32
    if SQLPath.is_file():
33
        logger.info('SQLite database file already exist. Not gonna mess with it!')
34
        return False
35
        '''Delete current database! During testing only'''
36
        '''os.remove(sqliteFile)
37
        logger.info('DEBUG: database file already exist. Deleted it!')'''
38
39
    #Create the PRIMARY KEY column.
40
    KeyFieldType = CNBP_schema_keyfield_type  # column data type
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable CNBP_schema_keyfield_type does not seem to be defined.
Loading history...
41
42
    #Try to connect the database to start the process:
43
44
    try:
45
        # Create on Connecting to the database file
46
        ConnectedDatabase = sqlite3.connect(PathString)
47
48
        c = ConnectedDatabase.cursor()
49
50
        logger.info('Creating PRIMARY KEY DBKEY column in database.')
51
52
        # Creating a new SQLite table with DBKey column (inspired by: https://sebastianraschka.com/Articles/2014_sqlite_in_python_tutorial.html)
53
        c.execute('CREATE TABLE {tn} ({nf} {ft} PRIMARY KEY)'.format(tn=TableName, nf=KeyFieldString, ft=KeyFieldType))
54
55
        logger.info('PRIMARY KEY DBKEY column successfully created in database.')
56
57
        logger.info('Creating secondary columns in database.')
58
59
        # Adding accessory columns via a loop
60
        for column in ColumnsNameTypeList:
61
            if (column[1] != "TEXT" and
62
                column[1] != "REAL" and
63
                column[1] != "BLOB" and
64
                #column[1] != "NULL" and
65
                column[1] != "INTEGER"):
66
                continue  # skip iteration is the data type is not specified properly.
67
            else:
68
                c.execute("ALTER TABLE {tn} ADD COLUMN '{cn}' {ct}".format(tn=TableName, cn=column[0], ct=column[1]))
69
70
        logger.info('Secondary columns created in database.')
71
72
        # Committing changes and closing the connection to the database file
73
        ConnectedDatabase.commit()
74
        ConnectedDatabase.close()
75
    except:
76
        logger.info('SQLite database creation/update issue, suspect schema non-compliant SQLite database. Did you corrupt this SQLite database somehow?')
77
        raise IOError
78
    return True