Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modify the database, generate new files, and an error occurs #65

Open
MYAN1998 opened this issue Jan 17, 2025 · 0 comments
Open

Modify the database, generate new files, and an error occurs #65

MYAN1998 opened this issue Jan 17, 2025 · 0 comments

Comments

@MYAN1998
Copy link

Hello,thank you for your contribution.Below is the code I wrote using your library.

from pya2l import DB
import pya2l.model as model
import time
import re

# 实例化数据库对象
db = DB()

# 根据A2L创建对应的数据库,执行之后,会在目录下创建A2L对应的数据库
try:
    # A2L_11.a2l 替换成对应的A2L文件命
    session = db.import_a2l("A2L_11.a2l")
    time.sleep(5)
except Exception:
    pass

# 打开已存在的数据库
session_db = db.open_existing("A2L_11")

# 选取数据库所有测量的量
measurements = session_db.query(model.Measurement).order_by(model.Measurement.name).all()
for m in measurements:
    # 匹配条件"XXXXs数字s数字_或XXXXu数字s数字_的变量"
    # .*s\d+s\d+_:表示任意字符(.*)后跟 s,再后跟一个或多个数字,接着是 s,然后是一个或多个数字,最后是下划线。
    # .*u\d+s\d+_:表示任意字符(.*)后跟 u,再后跟一个或多个数字,接着是 s,然后是一个或多个数字,最后是下划线。
    pattern = re.compile(r'(s\d+s(\d+)_.*|u\d+s(\d+)_.*)')
    match = pattern.search(m.name)
    if match:
        if match.group(2):
            num = match.group(2)
            m.conversion = "BitConver" + str(num)
        elif match.group(3):
            num = match.group(3)
            m.conversion = "BitConver" + str(num)
session_db.commit()
session_db.close()
out_file = "new.a2l"
db.export_a2l("A2L_11",out_file,"utf-8")

When running the last line of code, an "database is locked" error occurs.I modified your source code and temporarily solved the problem.
I modified the function named export_a2l in the init.py file.

def export_a2l(session, output: typing.Union[TextIOWrapper, str, typing.Any] = sys.stdout, encoding="latin1"):  # noqa: UP007
    """
    Parameters
    ----------
    file_name: str
        Name of the A2L exported.

    encoding: str
        File encoding like "latin-1" or "utf-8".
    """
    # session = open_existing(db_name)
    namespace = dict(session=session, model=model)
    data = doTemplateFromText(A2L_TEMPLATE, namespace, formatExceptions=False, encoding=encoding)
    if isinstance(output, TextIOWrapper):
        output(data)
    else:
        with open(file=output, mode="w", encoding=encoding) as outf:
            outf.write(data)

It should be an error caused by the sentence "open_existing(db_name)".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant