Beispiel #1
0
def UpdatePersonnel(post_data):

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")

    check_list = ["PersonnelId", "JsonData"]
    check_result = checkPostData(check_list, post_data)
    if check_result:
        return jsonFail(check_result)

    if "UserId" not in post_data:
        post_data["UserId"] = 0
    if "Type" not in post_data:
        post_data["Type"] = 0
    if "Domicile" not in post_data:
        post_data["Domicile"] = ""

    try:
        db = Database()
        err = db.update_personnel(post_data["PersonnelId"],
                                  post_data["UserId"], post_data["Type"],
                                  post_data["Domicile"], post_data["JsonData"])
    except Exception as err:
        return jsonFail(err)
    else:
        if err:
            return jsonFail(err)
        db.close()
        return jsonSuccess("Success")
Beispiel #2
0
def delete_id(id):
    db = Database()
    resp = db.delete(id)
    db.close()
    if resp['id'] == 'does not exist':
        return jsonify(resp), 404
    return jsonify(resp)
Beispiel #3
0
def UpdateFamily(post_data):

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")
    if session['Type'] not in [2, 3]:
        return jsonFail("暂无权限访问")

    check_list = ["FamilyId", "JsonData"]
    check_result = checkPostData(check_list, post_data)
    if check_result:
        return jsonFail(check_result)

    if "AddrId" not in post_data:
        post_data["AddrId"] = 0
    if "MasterName" not in post_data:
        post_data["MasterName"] = ""

    try:
        db = Database()
        err = db.update_family(post_data["FamilyId"], post_data["AddrId"],
                               post_data["MasterName"], post_data["JsonData"])
    except Exception as err:
        return jsonFail(err)
    else:
        db.close()
        if err:
            return jsonFail(err)

        return jsonSuccess("Success")
Beispiel #4
0
    def run(self):
        database = Database()
        client = TelegramClient('session_name', local.api_id, local.api_hash)
        client.start()

        add_notification = (
            "INSERT INTO coin_notification (id, message, date) VALUES (%(notification_id)s, %(notification_message)s, %(notification_date)s)"
        )

        cursor = database.query("select max(id) as mx from coin_notification")

        last_db_id = 0
        for mx in cursor:
            last_db_id = mx[0]

        regex = r'[^a-zA-Z0-9.()%/#]+'
        channel = PeerChannel(channel_id=1131948783)

        while True:
            messages = client.get_messages(channel,
                                           min_id=last_db_id,
                                           limit=1000)
            if len(messages) == 0:
                break

            for m in messages:
                m.message = re.sub(regex, ' ', m.message)
                notification = {
                    'notification_id': m.id,
                    'notification_message': m.message.encode('utf8'),
                    'notification_date': m.date
                }
                database.execute(add_notification, notification)

        database.close()
Beispiel #5
0
 def add_task(self, id, name, user):
     """Adds a task to Task table. Requires ID, NAME, USER params"""
     db = Database(connect=True)
     #print "INSERT INTO Task VALUES(%s, '%s', '%s');" % (id, name, user)
     q = db.query("insert into Task values(%s, '%s', '%s');" % (id, name, user))
     db.close() 
     return q
Beispiel #6
0
def search_db():
    if request.headers['Content-Type'] == 'application/json':
        content = request.json
        db = Database()
        resp = db.search(content)
        db.close()
        return jsonify(resp)
Beispiel #7
0
 def wrapper(*args, **kwargs):
     db = Database()
     try:
         result = callback(db=db, *args, **kwargs)
     finally:
         db.close()
     return result
Beispiel #8
0
def UpdateAddr(post_data):

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")
    if session['Type'] not in [2, 3]:
        return jsonFail("暂无权限访问")

    check_list = ["AddrId", "Community", "Building", "Dormitory"]
    check_result = checkPostData(check_list, post_data)
    if check_result:
        return jsonFail(check_result)

    if "FamilyId" not in post_data:
        post_data["FamilyId"] = 0

    # 更新房屋地址
    try:
        db = Database()
        err = db.update_addr(post_data["AddrId"], post_data["Community"],
                             post_data["Building"], post_data["Dormitory"],
                             post_data["FamilyId"])
    except Exception as err:
        return jsonFail(err)
    else:
        db.close()
        if err:
            return jsonFail(err)

        return jsonSuccess("Success")
Beispiel #9
0
 def add_task_event(self, id, task_id, user, is_started, start, stop, minutes_sum):
     """Adds a task to Task table. Requires ID, NAME, USER params"""
     db = Database(connect=True)
     values = "('%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (id, task_id, user, 
                                                              is_started, start, 
                                                              stop, minutes_sum)
     q = db.query("insert into TaskEvent values%s;" % (values))
     db.close() 
     return q
Beispiel #10
0
def new_entry():
    if request.headers['Content-Type'] == 'application/json':
        content = request.json
        if all(key in content for key in ("name", "address", "phone")):
            db = Database()
            resp = db.insert(name=content['name'],
                             address=content['address'],
                             phone=content['phone'])
            db.close()
        return jsonify(resp)
Beispiel #11
0
    def test_db(self):

        aiven_results = 0
        try:

            psql_conn = Database(Config.PS_DATABASE_NAME)

            print("DB Connected!")

            query = """ CREATE TABLE IF NOT EXISTS """ + Config.PS_TEST_WEBSITE_TABLE_NAME + """ (
                        name varchar(255) NOT NULL,
                        url varchar(255) NOT NULL,
                        status_code integer NOT NULL,
                        reason varchar(255) NOT NULL,
                        response_time decimal NOT NULL,
                        checked_at timestamp NOT NULL,
                        pattern varchar(255),
                        has_pattern boolean DEFAULT FALSE,
                        PRIMARY KEY(url, checked_at)
                    )  """

            psql_conn.query(query)
            print("Table created successfully in PostgreSQL ")

            query = "DELETE FROM " + Config.PS_TEST_WEBSITE_TABLE_NAME + " WHERE url = 'https://aiven.io'"
            psql_conn.query(query)

            prod, cons = app.run(Config.K_MONITOR_TOPIC,
                                 Config.PS_DATABASE_NAME,
                                 Config.PS_TEST_WEBSITE_TABLE_NAME,
                                 "tests/t_monitor_db.yml")

            print("all 'aiven.io' is deleted from PostgreSQL ")

            interval = File.read_time_interval("tests/t_monitor_corrupted.yml")

            time.sleep(interval - 1)

            app.stop_monitor(prod, cons)

            query = "SELECT * FROM " + Config.PS_TEST_WEBSITE_TABLE_NAME + " WHERE url = 'https://aiven.io'"
            cursor = psql_conn.query(query)
            aiven_results = cursor.fetchall()

            psql_conn = Database(Config.PS_DATABASE_NAME)
            query = "DROP TABLE " + Config.PS_TEST_WEBSITE_TABLE_NAME
            psql_conn.query(query)
            psql_conn.close()

        except Exception as error:
            print("Error while connecting to PostgreSQL", error)

        self.assertEqual(len(aiven_results), 1)
Beispiel #12
0
class TableTest(TestCase):
    def setUp(self):
        # reset db on every test
        if os.path.isfile("norowdb.sqlite"):
            os.remove("norowdb.sqlite")
        self.db = Database()

    def test_create_table(self):
        self.db.create_table("Cats")

    def test_get_tables(self):
        self.db.create_table("Cats")
        tables = self.db.get_tables()
        self.assertEqual(tables, ["Cats"])

    def test_delete_table(self):
        self.db.create_table("Cats")
        self.db.delete_table("Cats")
        tables = self.db.get_tables()
        self.assertEqual(tables, [])

    def test_duplicate_table(self):
        self.db.create_table("Cats")
        with self.assertRaises(sqlite3.OperationalError):
            self.db.create_table("Cats")

    def test_add_column(self):
        self.db.create_table("Cats")
        self.db.add_column("Cats", "name")

    def test_delete_column(self):
        self.db.create_table("Cats")
        self.db.add_column("Cats", "name")
        self.db.add_column("Cats", "age")
        self.db.delete_column("Cats", "name")

    def test_delete_table_column(self):
        self.db.create_table("Cats")
        self.db.add_column("Cats", "name")
        self.db.add_column("Cats", "age")
        self.db.delete_table("Cats")
        # Check table is deleted
        tables = self.db.get_tables()
        self.assertEqual(tables, [])
        # Check columns are removed
        self.db.create_table("Cats")
        columns = self.db.get_columns("Cats")
        self.assertEqual(columns, [])

    def tearDown(self):
        self.db.close()
Beispiel #13
0
def update_id(id):
    if request.headers['Content-Type'] == 'application/json':
        content = request.json
        print content
        db = Database()
        resp = db.update(id=id, params=content)
        db.close()
        print resp
        if 'id' in resp and resp['id'] == 'does not exist':
            return jsonify(resp), 404
        return jsonify(resp)
    else:
        return jsonify(
            {'response': 'failure, content-type should be application/json'})
Beispiel #14
0
    def create_table_for_consumer(self):
        psql_conn = Database(self.db)
        psql_conn.query(""" CREATE TABLE IF NOT EXISTS """ + self.table + """ 
                        (name varchar(255),
                        url varchar(255) NOT NULL,
                        status_code integer NOT NULL,
                        reason varchar(255) NOT NULL,
                        response_time decimal NOT NULL,
                        checked_at timestamp NOT NULL,
                        pattern varchar(255),
                        has_pattern boolean DEFAULT FALSE,
                        PRIMARY KEY(url, checked_at))  """)

        psql_conn.close()
Beispiel #15
0
class Repository:
    def __init__(self):
        self.db = Database(**db_credentials)

    def get_portfolio(self, session_token):
        result = self.db.get_portfolio(session_token)
        if not result:
            return None

        user_id, data = result

        fonds = {fond_data["ticker"]: Fond(**fond_data) for fond_data in data}
        return Portfolio(user_id, fonds)

    def put_portfolio(self, portfolio):
        self.db.save_portfolio(portfolio.to_json(), portfolio.user_id)

    def get_user_info(self, session_token):
        return self.db.get_user_info(session_token)

    def _get_user_info_by_google_id(self, google_id):
        return self.db.get_user_info_by_google_id(google_id)

    def create_user(self, user_info):
        return self.db.create_user(user_info)

    def generate_session_key(self, user_data):
        user_info = self._get_user_info_by_google_id(user_data["id"])
        if user_info:
            user_id, data = user_info
        else:
            user_id = self.create_user(user_data)

        return self.db.new_session(user_id)

    def delete_session_key(self, session_key):
        session = self.db.get_session(session_key)
        if not session:
            return None

        key, user_id, created = session
        self.db.delete_sessions_for_user(user_id)

    def valid_session_key(self, session_key):
        return self.db.get_session(session_key) is not None

    def close(self):
        self.db.close()
Beispiel #16
0
def Login(post_data):

    # 校验请求参数
    if 'ValidateCode' not in session:
        return jsonFail("Please get the ValidateCode first")

    check_list = ["ValidateCode", "UserName", "Password"]
    check_result = checkPostData(check_list, post_data)
    if check_result:
        return jsonFail(check_result)

    if post_data['ValidateCode'] != session['ValidateCode']:
        return jsonFail('ValidateCode error')

    try:
        post_data["Password"] = decryption(post_data["Password"])
    except Exception:
        return jsonFail('password ras decryption error')
    else:
        if post_data["Password"] == "解密失败":
            return jsonFail('password ras decryption error')

    # 数据库校验账号密码是否正确
    try:
        db = Database()
        user, err = db.check_login(post_data["UserName"],
                                   post_data["Password"])
    except Exception as err:
        return jsonFail(err)
    else:
        db.close()
        if err:
            return jsonFail(err)

    # 保存登录信息
    session['ID'] = user["id"]
    session['UserName'] = user["username"]
    session['Password'] = user["password"]
    session['Type'] = user["type"]

    # 删除不需要返回给前端的参数
    del user["createtime"]
    del user["password"]
    del user["lastupdate"]
    del user["status"]

    return jsonSuccess(user)
Beispiel #17
0
def SelectInfo(post_data):

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")
    if session['Type'] not in [2, 3]:
        return jsonFail("暂无权限访问")

    try:
        db = Database()
        result = db.select_info(session["ID"], session["Type"], post_data)
    except Exception as err:
        print_exc()
        return jsonFail(err)
    else:
        db.close()
        return jsonSuccess(result)
Beispiel #18
0
def FamilyInfo(post_data):

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")

    check_list = ["FamilyId"]
    check_result = checkPostData(check_list, post_data)
    if check_result:
        return jsonFail(check_result)

    try:
        db = Database()
        result = db.select_family_info(post_data["FamilyId"])
    except Exception as err:
        return jsonFail(err)
    else:
        db.close()
        return jsonSuccess(result)
Beispiel #19
0
def ListFamily():

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")

    try:
        db = Database()
        family = db.select_family(session["ID"], session['Type'])
    except Exception as err:
        return jsonFail(err)
    else:
        db.close()
        # 删除不需要返回给前端的参数
        for index in range(len(family)):
            del family[index]["createtime"]
            del family[index]["lastupdate"]
            del family[index]["user_id"]

        return jsonSuccess(family)
Beispiel #20
0
def ListUser():

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")
    if session['Type'] not in [2, 3]:
        return jsonFail("暂无权限访问")

    try:
        db = Database()
        result = db.select_user(session["ID"], session["Type"])
    except Exception as err:
        return jsonFail(err)
    else:
        for index in range(len(result)):
            del result[index]["createtime"]
            del result[index]["lastupdate"]
            del result[index]["status"]

        db.close()
        return jsonSuccess(result)
Beispiel #21
0
def AddAddr(post_data):

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")
    if session['Type'] not in [2, 3]:
        return jsonFail("暂无权限访问")

    check_list = ["Community", "Building", "Dormitory"]
    check_result = checkPostData(check_list, post_data)
    if check_result:
        return jsonFail(check_result)

    try:
        db = Database()
        db.insert_addr(session["ID"], post_data["Community"],
                       post_data["Building"], post_data["Dormitory"])
    except Exception as err:
        return jsonFail(err)
    else:
        db.close()
        return jsonSuccess("Success")
Beispiel #22
0
def DeleteUser(post_data):

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")
    if session['Type'] not in [2, 3]:
        return jsonFail("暂无权限访问")

    check_list = ["UserId"]
    check_result = checkPostData(check_list, post_data)
    if check_result:
        return jsonFail(check_result)

    try:
        db = Database()
        err = db.delete_user(post_data["UserId"])
    except Exception as err:
        return jsonFail(err)
    else:
        if err:
            return jsonFail(err)
        db.close()
        return jsonSuccess("Success")
Beispiel #23
0
    def run(self):
        start_time = time.time()
        spider2 = Captch(proxy)
        mysqldb = Database()

        while not self.stop_flag:
            while not news_queue.empty():
                news_data = news_queue.get()
                
                title = translate(news_data['title'])
                flag = spider2.captch(title)
                news_data.update({
                    'title': title,
                    'compliance': flag
                    })
                
                mysqldb.insert(news_data)
            
            if time.time() - start_time > self.timeout:
                self.stop_flag = True
        
        mysqldb.close()
        print("百度验证线程-{}关闭.".format(self.name), end="")
Beispiel #24
0
def Register(post_data):

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")
    if session['Type'] not in [2, 3]:
        return jsonFail("暂无权限访问")

    check_list = ["UserName", "Type"]
    check_result = checkPostData(check_list, post_data)
    if check_result:
        return jsonFail(check_result)

    if "Password" not in post_data:
        post_data["Password"] = "******"

    if post_data["Type"] == 3:
        return jsonFail("暂无权限访问")
    if post_data["Type"] == 2 and session['Type'] != 3:
        return jsonFail("暂无权限访问")
    if post_data["Type"] not in [1, 2, 3]:
        return jsonFail("暂无权限访问")
    if post_data["Type"] == 1 and "PersonnelId" not in post_data:
        return jsonFail("PersonnelId must exist")

    try:
        db = Database()
        err = db.insert_user(session["ID"], post_data["UserName"],
                             post_data["Password"], post_data["Type"],
                             post_data["PersonnelId"])
    except Exception as err:
        return jsonFail(err)
    else:
        if err:
            return jsonFail(err)
        db.close()
        return jsonSuccess("Success")
Beispiel #25
0
def ListPersonnel():

    # 校验请求参数是否符合预期
    if ("ID" not in session) or ("Type" not in session):
        return jsonFail("Login information is invalid, please to login")

    # 如果是管理员登录
    if session["Type"] in [2, 3]:
        try:
            result = []
            db = Database()
            family = db.select_family(session["ID"], session['Type'])
            for index, tmp in enumerate(family):
                # 查询个人信息
                personnel = db.select_personnel(tmp["id"])
                # 删除不需要返回给前端的参数
                for index in range(len(personnel)):
                    del personnel[index]["createtime"]
                    del personnel[index]["lastupdate"]
                result.append(personnel)

        except Exception as err:
            return jsonFail(err)
        else:
            db.close()
            return jsonSuccess(result)

    # 如果是普通用户登录
    else:
        try:
            db = Database()
            result = db.select_personnel_by_normal_user(session["ID"])
        except Exception as err:
            return jsonFail(err)
        else:
            db.close()
            return jsonSuccess(result)
Beispiel #26
0
from transforms import UpdateDataTransform
from db import Database
from country_aliases_transforms import CountryAliasesTransforms
from missing_country_transforms import MissingCountryTransforms
from city_aliases_transforms import CityAliasesTransforms
from skill_aliases_transforms import SkillAliasesTransforms

db = Database()
db.connect()

transform_batches = [
  CountryAliasesTransforms(db),
  MissingCountryTransforms(db),
  CityAliasesTransforms(db),
  SkillAliasesTransforms(db)
]

for transform_batch in transform_batches:
    for transform in transform_batch.get_transforms():
        transform.run()

db.close()
Beispiel #27
0
class Wagtail:
    def __init__(self):
        self.principal = get_principal()

        self.config = ConfigManager(self)
        self.db = Database(self)

        self.zgram_queue = queue.Queue()
        self.error_queue = queue.Queue()

        def zgram_handler(zp, zgram):
            self.zgram_queue.put(zgram)
            # we send a SIGWINCH signal to ourselves,
            # making ncurses think that the window was resized.
            # this is the best way I know of to interrupt ncurses
            # in blocking mode.
            os.kill(os.getpid(), SIGWINCH)

        def error_handler(error):
            self.error_queue.put(error)
            os.kill(os.getpid(), SIGWINCH)

        self.zpipe = zpipe.ZPipe(['./zpipe/zpipe'], zgram_handler,
                                 error_handler)

        self.zpipe.subscribe('message', '*', self.principal)
        for class_, instance, recipient, _ in self.db.get_subscriptions():
            self.zpipe.subscribe(class_, instance, recipient)

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        self.db.close()
        self.zpipe.close()

    def get_config_path(self):
        if os.getenv('XDG_CONFIG_HOME') is not None:
            return os.path.join(os.getenv('XDG_CONFIG_HOME'), 'wagtail',
                                'config.py')
        return os.path.expanduser('~/.config/wagtail/config.py')

    def get_database_path(self):
        if os.getenv('XDG_CONFIG_HOME') is not None:
            return os.path.join(os.getenv('XDG_CONFIG_HOME'), 'wagtail',
                                'database.sqlite3')
        return os.path.expanduser('~/.config/wagtail/database.sqlite3')

    def event_quit(self):
        self.should_quit = True

    def event_cmdline_open(self, initial_input=''):
        self.window_stack.append(CommandLine(self, initial_input))

    def event_cmdline_close(self):
        assert isinstance(self.window_stack[-1], CommandLine)
        self.window_stack.pop().close()

    def event_cmdline_exec(self, cmdline):
        events = parse_cmdline_into_events(cmdline)
        self.handle_events(events)

    def event_status(self, text):
        self.status_bar.set_status(text)

    def event_zwrite(self, opts):
        if ((opts.class_.lower() == 'message')
                and ((opts.instance.lower() == 'personal') or
                     (opts.instance.lower() == 'urgent'))
                and (len(opts.recipients) == 0)):
            self.status_bar.set_status(
                'Cannot send personal message with no recipient.')
        else:
            self.window_stack.append(ZephyrgramComposer(self, opts))

    def event_composer_close(self):
        assert (isinstance(self.window_stack[-1], ZephyrgramComposer))
        self.window_stack.pop().close()

    def event_send_zephyrgrams(self, zgrams):
        for zgram in zgrams:
            self.zpipe.zwrite(zgram.to_zpipe())

            if zgram.is_personal():
                # this is a personal message. we won't get it back, so
                # we should save a copy.
                # TODO: what if the zgram actually fails to send?
                zgram.time = zgram.time or datetime.now()
                zgram.sender = zgram.sender or self.principal
                self.db.append_message(zgram)

        self.main_window.redraw()  # to display the personals

    def event_subscribe(self, class_, instance, recipient):
        new_subs = self.db.subscribe(class_, instance, recipient)

        if len(new_subs) == 0:
            self.status_bar.set_status('Error: Already subscribed.')
        else:
            for args in new_subs:
                self.zpipe.subscribe(*args)
            self.status_bar.set_status('Subscribed successfully.')

    def event_unsubscribe(self, class_, instance, recipient):
        unsubs = self.db.unsubscribe(class_, instance, recipient)

        if len(unsubs) == 0:
            self.status_bar.set_status(
                ('Error: either not subscribed, or trying to unsubscribe '
                 'from unclass.'))
        else:
            for args in unsubs:
                self.zpipe.unsubscribe(*args)
            self.status_bar.set_status('Unsubscribed successfully.')

    def event_import_zsubs(self, path):
        if path is None:
            path = os.path.expanduser('~/.zephyr.subs')

        try:
            with open(path) as zsubs:
                processed = 0
                skipped = 0
                for line in zsubs:
                    if len(line.strip()) == 0:
                        continue

                    parts = line.strip().split(',')
                    if len(parts) != 3:
                        skipped += 1
                    else:
                        for sub in self.db.subscribe(*parts):
                            self.zpipe.subscribe(*sub)
                        processed += 1

            self.status_bar.set_status(
                'Done, {} lines processed successfuly, {} skipped.'.format(
                    processed, skipped))
        except FileNotFoundError:
            self.status_bar.set_status(
                'Error: file {} not found.'.format(path))

    def event_reload_config(self):
        self.config.reload()
        self.main_window.redraw()  # styling rules might've changed

    def event_filter(self, new_filter):
        self.main_window.set_filter(new_filter)

    def handle_events(self, events):
        for event, *event_args in events:
            # call self.event_{eventname}(*event_args)
            getattr(self, 'event_{}'.format(event))(*event_args)

    def main_curses(self, screen):
        # tell the terminal to not send us SIGINTs when Ctrl+C is pressed
        tty_attributes = termios.tcgetattr(sys.stdin)
        tty_attributes[3] &= ~termios.ISIG
        termios.tcsetattr(sys.stdin, termios.TCSANOW, tty_attributes)

        self.screen = screen

        curses.use_default_colors()
        curses.curs_set(0)

        self.status_bar = StatusBar(self)
        self.main_window = MainWindow(self)
        curses.doupdate()

        # this window stack kind of duplicates the one kept by
        # curses.panel — perhaps we should just use that directly?
        self.window_stack = [self.status_bar, self.main_window]

        self.should_quit = False

        while True:
            key = screen.get_wch()  # blocks indefinitely

            if key == curses.KEY_RESIZE:
                # this could be either a legitimate SIGWINCH, notifying us that
                # the terminal was resized,
                # or a fake SIGWINCH, generated by the zgram_handler
                # (see __init__) notifying us that we have new zephyrgrams
                # to take from the queue
                while not self.zgram_queue.empty():
                    zgram = Zephyrgram.from_zpipe(self.zgram_queue.get())
                    self.db.append_message(zgram)

                    # if this is in class 'ununclass', and we aren't yet
                    # subscribed to 'unununclass', do so
                    undepth, class_stripped = take_unprefix(zgram.class_)
                    new_unclass = 'un' + zgram.class_
                    for instance, recipient in self.db.update_undepth(
                            class_stripped, undepth + 1):
                        self.zpipe.subscribe(new_unclass, instance, recipient)

                for window in self.window_stack:
                    window.update_size()
            else:
                self.status_bar.clear_status()

                self.should_quit = False

                events = self.window_stack[-1].handle_keypress(key)
                self.handle_events(events)

                if self.should_quit:
                    break

            if not self.error_queue.empty():
                error = self.error_queue.get()
                self.status_bar.set_status('Error in {}: {}'.format(
                    error.operation, error.message))

            curses.doupdate()

    def main(self):
        curses.wrapper(self.main_curses)
        transaction.add_query(q.select, _k, 0, [1, 1, 1, 1, 1])
        q = Query(grades_table)
        transaction.add_query(q.increment, key, 1)
    transaction_workers[i % num_threads].add_transaction(transaction)

threads = []
for transaction_worker in transaction_workers:
    threads.append(threading.Thread(target=transaction_worker.run, args=()))

for i, thread in enumerate(threads):
    # print('Thread', i, 'started')
    thread.start()

for i, thread in enumerate(threads):
    thread.join()
    # print('Thread', i, 'finished')

num_committed_transactions = sum(t.result for t in transaction_workers)
# print(num_committed_transactions, 'transaction committed.')

query = Query(grades_table)
s = query.sum(keys[0], keys[-1], 1)

if s != num_committed_transactions * num_operations:
    print('Expected sum:', num_committed_transactions * num_operations,
          ', actual:', s, '. Failed.')
else:
    print('Pass.' + "Number of commited:" + str(num_committed_transactions))

db.close()
Beispiel #29
0
def main():
    parser = argparse.ArgumentParser(description='Files of rooms and students')
    parser.add_argument('--in_dir_rooms',
                        type=str,
                        default="rooms.json",
                        help='Input path for file with rooms')
    parser.add_argument('--in_dir_students',
                        type=str,
                        default="students.json",
                        help='Input path for file with students')
    parser.add_argument('--extension',
                        type=str,
                        default="json",
                        help='Input extension for output file')
    parser.add_argument('--db_user',
                        type=str,
                        default="root",
                        help='Input user for db')
    parser.add_argument('--db_password',
                        type=str,
                        default="",
                        help='Input password for db')
    parser.add_argument('--db_name',
                        type=str,
                        default="task4",
                        help='Input database name')
    args = parser.parse_args()

    db = Database(args.db_user, args.db_password)

    # Create db if not exists
    db.execute(create_db_query(args.db_name))
    db.select_database(args.db_name)

    # Create tables if not exist
    db.execute(create_table_room_query())
    db.execute(create_table_students_query())

    # Parse files
    rooms_reader = JsonReader(args.in_dir_rooms)
    rooms_list = rooms_reader.read()

    students_reader = JsonReader(args.in_dir_students)
    students_list = students_reader.read()

    # Insert values into tables
    db.executemany(insert_rooms_query(), rooms_list)
    db.executemany(insert_students_query(), students_list)

    # Create writer to save results
    writer = JSWriter()
    if args.extension == 'xml':
        writer = XMLWriter()

    timing_results = {"name": select_queries.keys(), "w/o": [], "w": []}

    for query_name in select_queries:
        start_time = time.time()
        result = db.query(select_queries[query_name]())
        end_time = time.time()
        writer.write_in_file(query_name, result)
        timing_results["w/o"].append(end_time - start_time)

    # Create index1 for Students table
    # result = db.query(add_index1_query())

    # Create index2 for Students table
    result = db.query(add_index2_query())

    for query_name in select_queries:
        start_time = time.time()
        result = db.query(select_queries[query_name]())
        end_time = time.time()
        writer.write_in_file(query_name, result)
        timing_results["w"].append(end_time - start_time)

    # Close connection
    db.close()

    # Print time results
    print(pd.DataFrame(timing_results))
Beispiel #30
0
class MainWin(QtWidgets.QMainWindow):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.central_widget = QtWidgets.QStackedWidget()
        self.setCentralWidget(self.central_widget)
        self.main_menu = Menu()
        self.database = Database("stocktracker", "db.ini", self.ui.statusbar.showMessage)
        self.database.connect_db()
        self.database.close()
        self.add_trans = AddTransactionForm(self.database, self.ui.statusbar.showMessage)
        self.add_stock = AddStockForm(self.database) 
        self.list_trans = ListTransactionForm(self.database)
        self.list_stocks = ListStockForm(self.database) 
        self.distribution = DistributionForm(self.database)
        self.central_widget.addWidget(self.main_menu)
        self.central_widget.addWidget(self.add_trans)
        self.central_widget.addWidget(self.add_stock)
        self.central_widget.addWidget(self.list_trans)
        self.central_widget.addWidget(self.list_stocks)
        self.central_widget.addWidget(self.distribution)

        self.ui.actionExit.triggered.connect(self.close)
        self.main_menu.exited.connect(self.close)
        self.main_menu.ui.button_add_transaction.clicked.connect \
            (lambda: self.central_widget.setCurrentWidget(self.add_trans))
        self.main_menu.ui.button_list_transactions.clicked.connect \
            (self.list_trans_event)
        self.main_menu.ui.button_list_stocks.clicked.connect \
            (self.list_stock_event)
        self.main_menu.ui.button_add_stock.clicked.connect \
            (lambda: self.central_widget.setCurrentWidget(self.add_stock))
        self.main_menu.ui.button_distribution.clicked.connect \
            (lambda: self.central_widget.setCurrentWidget(self.distribution))
        self.add_trans.ui.pushButton_cancel.clicked.connect \
            (lambda: self.central_widget.setCurrentWidget(self.main_menu))
        self.list_trans.ui.return_btn.clicked.connect \
            (lambda: self.central_widget.setCurrentWidget(self.main_menu))
        self.add_stock.ui.pushButton_cancel.clicked.connect \
            (lambda: self.central_widget.setCurrentWidget(self.main_menu))
        self.list_stocks.ui.return_btn.clicked.connect \
            (lambda: self.central_widget.setCurrentWidget(self.main_menu))
        self.distribution.ui.return_btn.clicked.connect \
            (lambda: self.central_widget.setCurrentWidget(self.main_menu))
        self.central_widget.setCurrentWidget(self.main_menu)

        self.resize(1400,600)

    def list_trans_event(self):
        self.list_trans.load_entries()
        self.central_widget.setCurrentWidget(self.list_trans)

    def list_stock_event(self):
        self.list_stocks.load_entries()
        self.central_widget.setCurrentWidget(self.list_stocks)

    def closeEvent(self, event):
        self.database.close()
        self.close()
Beispiel #31
0
def main():
	print "database structure will be created, any exising database/user WILL BE DROPPED"
	print "enter mysql root username (leave blank for \"root\"):"
	username = raw_input()
	password = getpass()
	if username == "" or username == None:
		username = "******"
	try:
		conn = Database(username, password, database=None)
	except:
		print "error connecting to mysql database as root"
		sys.exit(1)
	conn.query("DROP DATABASE IF EXISTS comp4321;")
	conn.query("GRANT USAGE ON *.* TO 'user4321'@'localhost';")
	conn.query("DROP USER 'user4321'@'localhost';")

	conn.query("CREATE DATABASE comp4321;")
	conn.query("GRANT ALL PRIVILEGES ON comp4321.* To 'user4321'@'localhost' IDENTIFIED BY 'gryphon';")

	conn.close()

	userConn = Database()

	userConn.query("CREATE TABLE Documents (\
	document_id int NOT NULL AUTO_INCREMENT,\
	document_url varchar(255) NOT NULL,\
	document_title varchar(255) NOT NULL,\
	document_size int NOT NULL,\
	modified DATETIME,\
	fetched TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\
	max_tf int DEFAULT 1,\
	document_chars int NOT NULL,\
	PRIMARY KEY (document_id),\
	UNIQUE (document_url),\
	INDEX url_index (document_url));")

	userConn.query("CREATE TABLE Links (\
	parent_id int NOT NULL,\
	child_url varchar(255) NOT NULL,\
	PRIMARY KEY (parent_id, child_url),\
	FOREIGN KEY (parent_id) REFERENCES Documents(document_id) ON DELETE CASCADE\
	);")
#FOREIGN KEY (child_id) REFERENCES Documents(document_id) ON DELETE CASCADE
#disabled this constraint for the time being, to allow links to children which have not yet been scraped. Eventually it may be bettter to add this back in and add rows to Links when processing the child document instead of the parent document (would require keeping track of which document adds pages to the scrape queue)
#also this would allow child_url to become child_id again

#eventually include idf in this table
	userConn.query("CREATE TABLE KeyWords (\
	word_id	int NOT NULL AUTO_INCREMENT,\
	word VARCHAR(255) NOT NULL,\
	document_frequency int NOT NULL COMMENT 'the number of unique documents which contain at least one instance of the word',\
	PRIMARY KEY (word_id),\
	UNIQUE (word),\
	INDEX word_index (word) USING HASH);")

	userConn.query("CREATE TABLE InvertedIndex (\
	word_id	int NOT NULL,\
	document_id int NOT NULL,\
	term_frequency int NOT NULL DEFAULT 0 COMMENT 'the number of appearances this word (word_id) makes in the document (document_id)',\
	in_title TINYINT(1) DEFAULT 0,\
	PRIMARY KEY (word_id, document_id),\
	INDEX forward_index (document_id),\
	FOREIGN KEY (word_id) REFERENCES KeyWords(word_id) ON DELETE CASCADE,\
	FOREIGN KEY (document_id) REFERENCES Documents(document_id) ON DELETE CASCADE);")

	userConn.query("CREATE TABLE IndexPositions (\
	word_id	int NOT NULL,\
	document_id int NOT NULL,\
	position int NOT NULL COMMENT 'the word position of this this word (word_id) in the document (document_id)',\
	PRIMARY KEY (word_id, document_id, position),\
	FOREIGN KEY (word_id, document_id) REFERENCES InvertedIndex(word_id, document_id) ON DELETE CASCADE,\
	FOREIGN KEY (document_id) REFERENCES Documents (document_id) ON DELETE CASCADE);")

	userConn.close()
Beispiel #32
0
def get_all():
    db = Database()
    resp = db.dump()
    db.close()
    return jsonify(resp)
Beispiel #33
0
 def query(self, data):
     db = Database(connect=True)
     q = db.query(data)
     db.close()
     return q
Beispiel #34
0
 def select(self, query):
 	db = Database(connect=True)
 	q = db.select(query)
 	db.close()
 	return q
Beispiel #35
0
    parser = argparse.ArgumentParser()

    parser.add_argument("--port",
                        type=int,
                        help="The port for the server run locally",
                        default=8000)
    parser.add_argument("--sensitivity",
                        type=float,
                        help="Model sensitivity",
                        default=0.35)
    parser.add_argument("--speed_factor",
                        type=float,
                        help="Keyboard speed factor playback",
                        default=0)

    return parser.parse_args(argv)


args = parse_argument(sys.argv[1:])
if (len(database.get_all()) > 0):
    listenter = Listener(sensitivity=args.sensitivity,
                         speed_factor=args.speed_factor)
    listenter.start()
app.run('0.0.0.0', args.port)
sound_recorder.end()
try:
    listenter.stop()
except:
    pass
database.close()
Beispiel #36
0
class TestDatabase(unittest.TestCase):
    def setUp(self):
        self.db = Database()
        self.db.init_tables()

    def tearDown(self):
        if self.db.conn.closed == 0:
            self.db.clear()
            self.db.close()

    def test_init_tables_Users(self):
        self.db.cur.execute(
            """SELECT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Users')""")
        self.assertIsNotNone(self.db.cur.fetchone(), "Users table exists.")

    def test_init_tables_Lists(self):
        self.db.cur.execute(
            """SELECT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Lists')""")
        self.assertIsNotNone(self.db.cur.fetchone(), "Lists table exists.")

    def test_init_tables_Notes(self):
        self.db.cur.execute(
            """SELECT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Notes')""")
        self.assertIsNotNone(self.db.cur.fetchone(), "Notes table exists.")

    def test_init_tables_Images(self):
        self.db.cur.execute(
            """SELECT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Images')""")
        self.assertIsNotNone(self.db.cur.fetchone(), "Images table exists.")

    def test_init_tables_Files(self):
        self.db.cur.execute(
            """SELECT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Files')""")
        self.assertIsNotNone(self.db.cur.fetchone(), "Files table exists.")

    def test_init_tables_Voices(self):
        self.db.cur.execute(
            """SELECT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Voices')""")
        self.assertIsNotNone(self.db.cur.fetchone(), "Voices table exists.")

    def test_init_tables_Audio(self):
        self.db.cur.execute(
            """SELECT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Audio')""")
        self.assertIsNotNone(self.db.cur.fetchone(), "Audio table exists.")

    def test_new_user(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.cur.execute("SELECT first_name, State FROM Users WHERE userID=%s", (441220162,))
        data = self.db.cur.fetchone()
        self.assertTrue((data[0] == 'Tai' and data[1] == 0), "New user created.")

    def test_new_user_invalid_name(self):
        id = 441220162
        name = "a" * 51
        state = 0
        self.db.new_user(id, name, state)
        self.db.cur.execute("SELECT first_name, State FROM Users WHERE userID=%s", (id,))
        data = self.db.cur.fetchone()
        self.assertIsNone(data, "Invalid username.")

    def test_user_exists_false(self):
        id = 441220162
        self.assertFalse(self.db.user_exists(id), "Not created user does not exist.")

    def test_user_exists_true(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.assertTrue(self.db.user_exists(id), "Created user exists.")

    def test_set_state(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.set_state(id, 3)
        self.db.cur.execute("SELECT State FROM Users WHERE userID=%s", (441220162,))
        self.assertEqual(self.db.cur.fetchone()[0], 3, "State set.")

    def test_init_state(self):
        id = 441220162
        name = "Tai"
        state = 3
        self.db.new_user(id, name, state)
        self.db.init_state(id)
        self.db.cur.execute("SELECT State FROM Users WHERE userID=%s", (441220162,))
        self.assertEqual(self.db.cur.fetchone()[0], 0, "Init state set.")

    def test_get_state(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.set_state(id, 3)
        self.db.cur.execute("SELECT State FROM Users WHERE userID = %s", (441220162,))
        self.assertEqual(self.db.cur.fetchone()[0], self.db.get_state(441220162)[0], "Get state.")

    def test_new_list(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.cur.execute("SELECT ListName FROM Lists WHERE userID = %s", (441220162,))
        self.assertEqual(self.db.cur.fetchone()[0], "List", "New list added.")

    def test_new_list_invalid_name(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        list_name = "a"*51
        self.db.new_list(id, list_name)
        self.db.cur.execute("SELECT ListName FROM Lists WHERE userID = %s", (441220162,))
        self.assertIsNone(self.db.cur.fetchone(), "Invalid list name.")

    def test_set_list(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.cur.execute("SELECT ListID FROM Users WHERE userID=%s", (441220162,))
        listID = self.db.cur.fetchone()[0]
        self.db.cur.execute("SELECT ListName FROM Lists WHERE ListID = %s", (listID,))
        self.assertEqual(self.db.cur.fetchone()[0], "List", "List set.")

    def test_set_list_notExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.set_list(id, 0)
        self.db.cur.execute("SELECT ListID FROM Users WHERE userID=%s", (id,))
        self.assertIsNone(self.db.cur.fetchone()[0], "List is not set if does not exist.")

    def test_get_cur_list_numbNotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.assertIsNone(self.db.get_cur_list_numb(id), "Got current list number if does not exist.")

    def test_get_cur_list_numbExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.assertEqual(self.db.get_cur_list_numb(id)[0], 0, "Got current list number.")

    def test_new_note_listExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.cur.execute("SELECT NoteName FROM Notes WHERE userID = %s", (id,))
        self.assertEqual(self.db.cur.fetchone()[0], "Note", "New note added.")

    def test_new_note_invalid_name(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        note_name = "a" * 51
        self.db.new_note(id, note_name)
        self.db.cur.execute("SELECT NoteName FROM Notes WHERE userID = %s", (id,))
        self.assertIsNone(self.db.cur.fetchone(),  "Invalid note name.")

    def test_new_note_listNotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_note(id, "Note1")
        self.db.cur.execute("SELECT NoteName FROM Notes WHERE userID = %s", (id,))
        self.assertIsNone(self.db.cur.fetchone(), "New note added.")

    def test_delete_list_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.delete_list(id)
        self.db.cur.execute("SELECT * FROM Lists WHERE userID = %s and ListName = %s", (id, "List"))
        self.assertIsNone(self.db.cur.fetchone(), "List deleted")

    def test_delete_list_checkNumb(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List0")
        self.db.new_list(id, "List1")
        self.db.set_list(id, 0)
        self.db.delete_list(id)
        self.db.cur.execute("SELECT numb FROM Lists WHERE userID = %s and ListName = %s", (id, "List1"))
        self.assertEqual(self.db.cur.fetchone()[0], 0, "Number changed")

    def test_delete_list_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.delete_list(id)
        self.db.cur.execute("SELECT * FROM Lists WHERE userID = %s and ListName = %s", (id, "List"))
        self.assertIsNotNone(self.db.cur.fetchone(), "List is not deleted")

    def test_edit_list_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.edit_list(id, "New_list")
        self.db.cur.execute("SELECT * FROM Lists WHERE userID = %s and ListName = %s", (id, "New_list"))
        new_name = self.db.cur.fetchone()
        self.db.cur.execute("SELECT * FROM Lists WHERE userID = %s and ListName = %s", (id, "List"))
        old_name = self.db.cur.fetchone()
        self.assertTrue((new_name is not None) and (old_name is None), "List edited")

    def test_edit_list_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.edit_list(id, "New_list")
        self.db.cur.execute("SELECT * FROM Lists WHERE userID = %s and ListName = %s", (id, "New_list"))
        new_name = self.db.cur.fetchone()
        self.db.cur.execute("SELECT * FROM Lists WHERE userID = %s and ListName = %s", (id, "List"))
        old_name = self.db.cur.fetchone()
        self.assertTrue((new_name is None) and (old_name is not None), "List is not edited if does not exist")

    def test_set_note_listExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.cur.execute("SELECT NoteID FROM Users WHERE userID=%s", (id,))
        noteID = self.db.cur.fetchone()[0]
        self.db.cur.execute("SELECT NoteName FROM Notes WHERE NoteID = %s", (noteID,))
        self.assertEqual(self.db.cur.fetchone()[0], "Note", "Note set.")

    def test_set_note_listNotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.cur.execute("SELECT NoteID FROM Users WHERE userID=%s", (id,))
        self.assertIsNone(self.db.cur.fetchone()[0], "List set.")

    def test_set_note_noteNotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_note(id, 0)
        self.db.cur.execute("SELECT NoteID FROM Users WHERE userID=%s", (id,))
        self.assertIsNone(self.db.cur.fetchone()[0], "List set.")

    def test_delete_note_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.delete_note(id)
        self.db.cur.execute("SELECT * FROM Notes WHERE userID = %s and NoteName = %s", (id, "Note"))
        self.assertIsNone(self.db.cur.fetchone(), "Note deleted")

    def test_delete_note_checkNumb(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note0")
        self.db.new_note(id, "Note1")
        self.db.set_note(id, 0)
        self.db.delete_note(id)
        self.db.cur.execute("SELECT numb FROM Notes WHERE userID = %s", (id,))
        self.assertEqual(self.db.cur.fetchone()[0], 0, "Number changed")

    def test_delete_note_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.delete_note(id)
        self.db.cur.execute("SELECT * FROM Notes WHERE userID = %s and NoteName = %s", (id, "Note"))
        self.assertIsNotNone(self.db.cur.fetchone(), "Note is not deleted if does not exist")

    def test_edit_note_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.edit_note(id, "New_note")
        self.db.cur.execute("SELECT * FROM Notes WHERE userID = %s and NoteName = %s", (id, "New_note"))
        new_name = self.db.cur.fetchone()
        self.db.cur.execute("SELECT * FROM Notes WHERE userID = %s and NoteName = %s", (id, "Note"))
        old_name = self.db.cur.fetchone()
        self.assertTrue((new_name is not None) and (old_name is None), "Note edited")

    def test_edit_note_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.edit_note(id, "New_note")
        self.db.cur.execute("SELECT * FROM Notes WHERE userID = %s and NoteName = %s", (id, "New_note"))
        new_name = self.db.cur.fetchone()
        self.db.cur.execute("SELECT * FROM Notes WHERE userID = %s and NoteName = %s", (id, "Note"))
        old_name = self.db.cur.fetchone()
        self.assertTrue((new_name is None) and (old_name is not None), "Note is not edited if does not exist")

    def test_get_lists_exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List0")
        self.db.new_list(id, "List1")
        data = self.db.get_lists(id)
        self.assertTrue((len(data) == 2) and (data[0][0] == "List0") and (data[1][0] == "List1"), "Lists exist.")

    def test_get_lists_notExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        data = self.db.get_lists(id)
        self.assertTrue(len(data) == 0, "Lists do not exist.")

    def test_get_notes_exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note0")
        self.db.new_note(id, "Note1")
        data = self.db.get_notes(id, 0)
        self.assertTrue((len(data) == 2) and (data[0][0] == "Note0") and (data[1][0] == "Note1"), "Notes exist.")

    def test_get_notes_notExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        data = self.db.get_notes(id, 0)
        self.assertTrue(len(data) == 0, "Notes do not exist.")

    def test_get_notes_listNotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.set_list(id, 0)
        self.assertIsNone(self.db.get_notes(id, 0), "Notes do not exist.")

    def test_new_image_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.new_image(id, "123")
        self.db.cur.execute("SELECT NoteID FROM Users WHERE userID = %s", (id,))
        noteID = self.db.cur.fetchone()[0]
        self.db.cur.execute("SELECT NoteImage FROM Images WHERE NoteID = %s", (noteID,))
        data = self.db.cur.fetchone()[0]
        self.assertEqual(data, "123", "New image added.")

    def test_new_image_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_image(id, "123")
        self.db.cur.execute("SELECT * FROM Images WHERE NoteImage = %s", ("123",))
        self.assertIsNone(self.db.cur.fetchone(), "New image is not added.")

    def test_new_file_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.new_file(id, "123")
        self.db.cur.execute("SELECT NoteID FROM Users WHERE userID = %s", (id,))
        noteID = self.db.cur.fetchone()[0]
        self.db.cur.execute("SELECT NoteFile FROM Files WHERE NoteID = %s", (noteID,))
        data = self.db.cur.fetchone()[0]
        self.assertEqual(data, "123", "New file added.")

    def test_new_file_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_file(id, "123")
        self.db.cur.execute("SELECT * FROM Files WHERE NoteFile = %s", ("123",))
        self.assertIsNone(self.db.cur.fetchone(), "New file is not added.")

    def test_new_voice_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.new_voice(id, "123")
        self.db.cur.execute("SELECT NoteID FROM Users WHERE userID = %s", (id,))
        noteID = self.db.cur.fetchone()[0]
        self.db.cur.execute("SELECT NoteVoice FROM Voices WHERE NoteID = %s", (noteID,))
        data = self.db.cur.fetchone()[0]
        self.assertEqual(data, "123", "New voice added.")

    def test_new_voice_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_voice(id, "123")
        self.db.cur.execute("SELECT * FROM Voices WHERE NoteVoice = %s", ("123",))
        self.assertIsNone(self.db.cur.fetchone(), "New voice is not added.")

    def test_new_audio_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.new_audio(id, "123")
        self.db.cur.execute("SELECT NoteID FROM Users WHERE userID = %s", (id,))
        noteID = self.db.cur.fetchone()[0]
        self.db.cur.execute("SELECT NoteAudio FROM Audio WHERE NoteID = %s", (noteID,))
        data = self.db.cur.fetchone()[0]
        self.assertEqual(data, "123", "New audio added.")

    def test_new_audio_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_audio(id, "123")
        self.db.cur.execute("SELECT * FROM Audio WHERE NoteAudio = %s", ("123",))
        self.assertIsNone(self.db.cur.fetchone(), "New audio is not added.")

    def test_get_images_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.new_image(id, "123")
        self.db.new_image(id, "abc")
        data = self.db.get_images(id)
        self.assertTrue((data[0][0] == "123") and (data[1][0] == "abc") and (len(data) == 2), "Got images.")

    def test_get_images_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.assertIsNone(self.db.get_images(id), "No images.")

    def test_get_files_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.new_file(id, "123")
        self.db.new_file(id, "abc")
        data = self.db.get_files(id)
        self.assertTrue((data[0][0] == "123") and (data[1][0] == "abc") and (len(data) == 2), "Got files.")

    def test_get_files_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.assertIsNone(self.db.get_files(id), "No files.")

    def test_get_voices_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.new_voice(id, "123")
        self.db.new_voice(id, "abc")
        data = self.db.get_voices(id)
        self.assertTrue((data[0][0] == "123") and (data[1][0] == "abc") and (len(data) == 2), "Got voices.")

    def test_get_voices_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.assertIsNone(self.db.get_voices(id), "No voices.")

    def test_get_audio_Exists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.db.new_list(id, "List")
        self.db.set_list(id, 0)
        self.db.new_note(id, "Note")
        self.db.set_note(id, 0)
        self.db.new_audio(id, "123")
        self.db.new_audio(id, "abc")
        data = self.db.get_audio(id)
        self.assertTrue((data[0][0] == "123") and (data[1][0] == "abc") and (len(data) == 2), "Got audio.")

    def test_get_audio_NotExists(self):
        id = 441220162
        name = "Tai"
        state = 0
        self.db.new_user(id, name, state)
        self.assertIsNone(self.db.get_audio(id), "No audio.")

    def test_close(self):
        self.db.close()
        self.assertTrue(self.db.conn != 0, "Closed")
Beispiel #37
0
class Solver:
    def __init__(self, db_dir, db_name, table, drop_on_init, t, R, t0, tf, dt):
        """
        initialise kinematics solver
        param db_dir: simulation results directory
        param db_name: simulation database name
        param table: table name
        param drop_on_int: remove existing database if exists
        param t: symbolic variable t - removes req to import sympy
        param R: symbolic equation for change in position over time
        vector in the form R = [rxi, ryj, rzk]
        param t0: initial time
        param tf: final time
        param dt: change in time
        """

        print('\n', '=' * 50, '\n\nInitialising solver...')
        columns = self.get_columns()
        print('\nvariables to write to db:', columns)
        self.db = Database(db_dir, db_name, table, drop_on_init, columns)
        self.t = t

        if not self.validate_time(t0, tf, dt):
            print('Invalid time input...')
            raise ValueError('Time must be positive and numeric')

        self.times = np.arange(t0, tf, dt, dtype='float')
        self.n_steps = (tf - t0) / dt

        print('\nt0 = {}\ntf = {}\ndt = {}\nsteps = {}\n'.format(
            t0, tf, dt, self.n_steps))

        self.R = R
        self.V = self.vector_derivative(R, t, 'position', 'velocity')
        self.A = self.vector_derivative(self.V, t, 'velocity', 'acceleration')
        self.at = self.vector_magnitude(self.V).diff(t)

        self.system_equations_info()
        print('\n', '=' * 50)

    @staticmethod
    def validate_time(t0, tf, dt):
        """
        validate time inputs should be numeric and > 0
        param t0: initial time (s)
        param tf: final time (s)
        param dt: change in time (dt)
        """
        try:
            t0 = float(t0)
            tf = float(tf)
            dt = float(dt)
        except Exception:
            return False
        if t0 >= 0 and tf > 0 and dt > 0:
            return True
        return False

    def system_equations_info(self):
        """
        print equation information to console
        """
        print('\nPosition, R = {}\n'.format(self.R))
        print('     rx =', self.R[0])
        print('     ry =', self.R[1])
        print('     rz =', self.R[2])
        print('\nVelocity, V = {}\n'.format(self.V))
        print('     vx =', self.V[0])
        print('     vy =', self.V[1])
        print('     vz =', self.V[2], '\n')
        print('\nAccekeration, A = {}\n'.format(self.A))
        print('     ax =', self.A[0])
        print('     ay =', self.A[1])
        print('     az =', self.A[2])

    def evaluate_state(self, ti):
        """
        evaluate position, velocity, acceleration etc. at time ti
        param ti: current time step
        """
        # NOTE: no. of parms in insert_data must match no. of columns
        ti_r = self.d2r(ti)
        r_mag, R = self.eval_v(self.R, ti_r)
        v_mag, V = self.eval_v(self.V, ti_r)
        a_mag, A = self.eval_v(self.A, ti_r)
        v_theta = [self.r2d(tht) for tht in self.direction_angles(V, v_mag)]
        a_psi = [self.r2d(psi) for psi in self.direction_angles(A, a_mag)]
        ut = self.unit_vector(v_vmag=(V, v_mag))
        ub = self.unit_vector(v_a=(V, A))
        un = self.unit_vector(u1_u2=(ub, ut))
        at = self.at.subs(self.t, ti_r)
        an = np.dot(A, un)
        rho = v_mag**2 / an
        Rc = R + (rho * un)
        rc_mag = self.vector_magnitude(Rc)
        self.insert_data(ti, R[0], R[1], R[2], r_mag, V[0], V[1], V[2], v_mag,
                         A[0], A[1], A[2], a_mag, an, at, rho, Rc[0], Rc[1],
                         Rc[2], rc_mag)

    @staticmethod
    def get_columns():
        """
        table names for results database
        return: string of variable names separated by ,
        """
        # NOTE: these are the column names used in the db
        return """
            \'t\', \'rx\', \'ry\', \'rz\', \'r_mag\',
            \'vx\', \'vy\', \'vz\', \'v_mag\',
            \'ax\', \'ay\', \'az\', \'a_mag\', \'an\', \'at\',
            \'rho\', \'rcx\', \'rcy\', \'rcz\', \'rc_mag\'
            """

    def vector_derivative(self, v, wrt, diff=None, result=None):
        """
        differentiate vector components wrt a symbolic variable
        param v: vector to differentiate
        param wrt: symbolic variable
        param diff: (str) quantity being differentiated
        param result: (str) name of resultant quantity
        return V: velcoity vector and components in x, y, z
        """
        if diff is not None and result is not None:
            print('d({})/d{} = {}'.format(diff, wrt, result))
        return [c.diff(wrt) for c in v]

    def eval_v(self, v, ti):
        """
        evaluate vector components and magnitude @ti
        param v: symbolic vector expression to evaluate @ti
        param ti: time step
        return mag, v_xyz: magnitude of vector and components evaluated @ti
        """
        v_xyz = [c.subs(self.t, ti).evalf() for c in v]
        mag = self.vector_magnitude(v_xyz)
        return mag, (v_xyz)

    def direction_angles(self, v, mag=None):
        """
        compute direction angles a vector makes with + x,y,z axes
        param v: vector with x, y, z components
        param mag: magnitude of vector
        """
        if mag is None:
            mag = self.vector_magnitude(v)
        return [acos(c / mag) for c in v]

    def unit_vector(self, v_vmag=None, v_a=None, u1_u2=None):
        """
        Calculate a unit vector using one of three input parameters.
        Two ways to compute unit vector:

        1. using vector and vector magnitude
        e.g. unit tangent vector is given by v/v_mag
        param v: vector with components x,y,z
        param v_mag: magnitude of vector

        2. using vectors v and a.
        e.g. velocity and acceleration vectors can be used to
        determine the unit binormal. ub = cross(v,a)/mag(cross(v,a))

        3. using orthogonal unit vectors.
        e.g. unit tangent and unit normal vectors can be used to
        determine the unit binormal. ub = corss(ut, un)

        2. and 3. used generally used to calculate one of two vectors.

        a. unit binormal
        Orthogonal unit vectors in the direction of velocity (ut)
        and in the direction towards the centre of curvature (un)
        form the osculating plane. The unit binormal vector is the
        vector perpendicular to the osculating plane.
        param v_a: tuple of vectors velocity vector and acceleration vector
        param ua_ub: tuple of unit tangent and unit normal vectors
        return ub: unit binormal vector

        b. unit normal
        The unit normal is the unit vector in the direction of the
        centre of curvature from the particle at position P.
        param Rcp_rho: tuple position vector of C relative to P and rho
        param ub_ut: tuple of unit binormal and unit tangent vectors
        return un: unit normal vector
        """

        if v_vmag is not None:
            v, mag = v_vmag[0], v_vmag[1]
            if mag is None:
                mag = self.vector_magnitude(v)
            return [c / mag for c in v]

        if v_a is not None:
            v, a = v_a[0], v_a[1]
            b = np.cross(v, a)
            return self.unit_vector(v_vmag=(b, None))

        if u1_u2 is not None:
            u1, u2 = u1_u2[0], u1_u2[1]
            return np.cross(u1, u2)

    @staticmethod
    def vector_magnitude(v):
        """
        compute magnitude of a vector
        param v: vector with components of Cartesian form
        return: magnitude of vector
        """
        # NOTE: np.linalg.norm(v) computes Euclidean norm
        mag = 0
        for c in v:
            mag += c**2
        return mag**(1 / 2)

    @staticmethod
    def get_components(v):
        """
        get components from vector, v
        return [vx, vy, vz]: vector in x, y, z components
        """
        # TODO: Extend for more dimensions
        return v[0], v[1], v[2]

    def insert_data(self, *args):
        """
        insert results into database
        param *args: parameters to save
        """
        args = [float(arg) for arg in args]
        self.db.insert(args)

    def propogate(self):
        """
        propogate system through time steps
        """
        print('\npropagating state...', end=' ')
        for ti in self.times:
            self.evaluate_state(ti)
        print('finished')

    @staticmethod
    def d2r(d):
        """
        convert from degrees to radians using sympi pi module
        param d: degrees
        return: radians
        """
        return d * (sp.pi.evalf() / 180)

    @staticmethod
    def r2d(rad):
        """
        convert from radians to degrees
        param rad: radians
        return: degrees
        """
        return rad * (180 / sp.pi.evalf())

    def close(self):
        """
        cleanup code. close connection to database
        """
        self.db.close()