|
#!/usr/bin/env python3 |
|
|
|
import argparse |
|
import os |
|
import re |
|
|
|
|
|
def parse_lab_name(lab_name): |
|
rg = re.compile("((?:[a-z][a-z]+))(\\s+)(\\d+)", re.IGNORECASE | re.DOTALL) |
|
m = rg.search(lab_name) |
|
if m: |
|
return m.group(3) |
|
return |
|
|
|
|
|
def parse_file_name(lab_name, markdown=False): |
|
file_ext = "txt" |
|
if markdown: |
|
file_ext = "md" |
|
lab_number = parse_lab_name(lab_name) |
|
file_name = "./{0}/questions.{1}".format(lab_name, file_ext) |
|
if lab_number: |
|
file_name = "./{0}/questions{1}.{2}".format( |
|
lab_name, lab_number, file_ext) |
|
return file_name |
|
|
|
|
|
def create_file(lab_name="Lab", questions=1, name="YOUR NAME", course="CS164-B", markdown=False): |
|
try: |
|
os.mkdir(lab_name) |
|
except FileExistsError: |
|
raise(FileExistsError("A lab with that name already exsists.")) |
|
exit(1) |
|
file_name = parse_file_name(lab_name, markdown=markdown) |
|
content = "# {0}\n\n{1} - {2}\n\n\n".format(lab_name, name, course) |
|
for question in range(questions): |
|
content += "## Question {0}\n\n".format(question + 1) |
|
f = open(file_name, "w") |
|
f.write(content) |
|
f.close() |
|
return file_name |
|
|
|
|
|
def main(): |
|
parser = argparse.ArgumentParser(description="Create lab setup") |
|
parser.add_argument("-l", "--lab", dest="lab_name", metavar="NAME", |
|
help="the lab name", required=True) |
|
parser.add_argument("-q", "--questions", dest="questions", metavar="Q", type=int, |
|
help="number of questions", required=True) |
|
parser.add_argument("-n", "--name", dest="name", metavar="NAME", default="YOUR NAME", |
|
help="name") |
|
parser.add_argument("-c", "--course", dest="course", metavar="C", default="CS164-B", |
|
help="course code") |
|
parser.add_argument("-m", "--markdown", dest="markdown", action="store_true", |
|
help="written as markdown") |
|
args = parser.parse_args() |
|
|
|
kwargs = vars(args) |
|
file_name = create_file(**kwargs) |
|
print("File written to {0}".format(file_name)) |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |