Hi ...
... and thanks for previous help!
now I have another easy (stupid) question, I could not found
an answer to in the docu. I'd like to create SQL queries.
So I downloaded the demo stuff from trampgeek.
The question is what is to be done on the server (Ubuntu 16.04.)?
I have sqlite3 running ... But after having pasted in the sql - snippet
for a query I get the following error in the browser:
***runtime error***
Error: unable to open database "q1": unable to open database file
Traceback (most recent call last):
File "__tester__.python3", line 37, in <module>
universal_newlines=True)
File "/usr/lib/python3.5/subprocess.py", line 626, in check_output
**kwargs).stdout
File "/usr/lib/python3.5/subprocess.py", line 708, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['sqlite3', 'q1']' returned non-zero exit status 1
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "__tester__.python3", line 40, in <module>
raise Exception("sqlite3 error: " + str(e))
Exception: sqlite3 error: Command '['sqlite3', 'q1']' returned non-zero exit status 1
Thanks for your help!
Best,
Thor
That error means that the command sqlite3 q1 failed because sqlite3 couldn't open the database file q1. I'm not sure why that has happened. We need to explore a bit.
Click the customise checkbox for the question and edit the template to insert a diagnostic print line as follows:
{% for TEST in TESTCASES %}
shutil.copyfile(db_files[0], db_working) # Copy clean writeable db file
print("Testing with working dir files:", os.listdir()) # <<<<< INSERT THIS LINE
testcode = """{{ TEST.testcode | e('py') }}"""
If you then try to save the question, it should fail to validate. The 'Got' output should start with a line like
Testing with working dir files: ['prog.in', 'q1', 'prog.cmd', '__tester__.python3', '__pycache__', 'q1.db', 'prog.out', 'prog.err']
Tell me what you get.
Richard
so I just added the following line in the template:
print("Testing with working dir files:", os.listdir()) # <<<<< INSERT THIS LINE
Then I started the query. In the attachment you can see what
I got. Hope you can guess, what the German words stand for.
Thanks !
Thor
That's odd: there's no output there from the new added line, which should come well before the exception. Are you quite sure the change was saved correctly?
Here's a more drastic change to the template which should prevent the exception and simply display the state of the working directory and the command being run for each test case. Replace everything in the template from the 'for TEST in TESTCASES' line onwards (inclusive) with the following and tell me what you get:
{% for TEST in TESTCASES %} shutil.copyfile(db_files[0], db_working) # Copy clean writeable db file print("Testing with working dir files:", os.listdir()) testcode = """{{ TEST.testcode | e('py') }}""" extra = """{{ TEST.extra | e('py') }}""" code_to_run = '\n'.join([prelude, extra, student_answer, testcode]) with open('commands', 'w') as sqlite_commands: sqlite_commands.write(code_to_run) with open('commands') as cmd_input: text_input = cmd_input.read() try: #output = subprocess.check_output(['sqlite3', db_working], input=text_input, # universal_newlines=True) output = "Command: " + text_input print(output) except Exception as e: raise Exception("sqlite3 error: " + str(e)) {% if not loop.last %} print(SEPARATOR) {% endif %} {% endfor %}