Beispiel #1
0
 def test_connection_string(self):
     self.assertEqual(
         'postgresql://*****:*****@127.0.0.1:1111/db_name',
         db_utils.generate_connect_string(
             '127.0.0.1',
             1111,
             'db_name',
             'test',
             'my_pass',
         ))
Beispiel #2
0
 def test_connection_string_dir(self):
     self.assertEqual(
         'postgresql://*****:*****@/db_name?host=/var/run/postgresql',
         db_utils.generate_connect_string(
             '/var/run/postgresql',
             5432,
             'db_name',
             'test',
             'my_pass',
         ))
            for entry in files + dirs:
                shutil.chown(os.path.join(root, entry), group=DAEMONCGI_GROUP)


parser = argparse.ArgumentParser(
    description="Generate git repositories for a specific course and homework")
parser.add_argument("--non-interactive", action='store_true', default=False)
parser.add_argument("semester", help="semester")
parser.add_argument("course", help="course code")
parser.add_argument("repo_name", help="repository name")
args = parser.parse_args()

conn_string = db_utils.generate_connect_string(
    DATABASE_HOST,
    DATABASE_PORT,
    "submitty",
    DATABASE_USER,
    DATABASE_PASS,
)

engine = create_engine(conn_string)
connection = engine.connect()
metadata = MetaData(bind=engine)

courses_table = Table('courses', metadata, autoload=True)
select = courses_table.select().where(
    courses_table.c.semester == bindparam('semester')).where(
        courses_table.c.course == bindparam('course'))
course = connection.execute(select, semester=args.semester,
                            course=args.course).fetchone()
Beispiel #4
0
def main():
    args = parse_args()
    user_id = args.user_id

    conn_str = db_utils.generate_connect_string(
        DATABASE_HOST,
        DATABASE_PORT,
        "submitty",
        DATABASE_USER,
        DATABASE_PASS,
    )

    engine = create_engine(conn_str)
    connection = engine.connect()
    metadata = MetaData(bind=engine)
    users_table = Table('users', metadata, autoload=True)
    select = users_table.select().where(users_table.c.user_id == bindparam('user_id'))
    user = connection.execute(select, user_id=user_id).fetchone()
    defaults = {
        'user_firstname': None,
        'user_preferred_firstname': None,
        'user_lastname': None,
        'user_email': None
    }
    if user is not None:
        print(
            'User already exists! Hit enter on any question to use '
            'existing value for that field.'
        )
        defaults = user

    firstname = get_input('User firstname', defaults['user_firstname'])
    preferred = get_input(
        'User preferred name',
        defaults['user_preferred_firstname'],
        True
    )
    lastname = get_input('User lastname', defaults['user_lastname'])
    email = get_input('User email', defaults['user_email'], True)

    update = {
        'user_firstname': firstname,
        'user_preferred_firstname': preferred,
        'user_lastname': lastname,
        'user_email': email
    }

    extra = ""
    if user is not None and AUTHENTICATION_METHOD == 'DatabaseAuthentication':
        extra = ' (Leave blank to use previous password)'
    while AUTHENTICATION_METHOD == 'DatabaseAuthentication':
        password = input('User password{}: '.format(extra))
        if password != '':
            update['user_password'] = get_php_db_password(password)
            break
        elif user is not None and password == '':
            break

    if user is not None:
        query = users_table.update(values=update).where(
            users_table.c.user_id == bindparam('b_user_id')
        )
        connection.execute(query, b_user_id=user_id)
    else:
        update['user_id'] = user_id
        query = users_table.insert()
        connection.execute(query, **update)
Beispiel #5
0
def main():
    args = parse_args()
    user_id = args.user_id
    semester = args.semester
    course = args.course
    registration_section = args.registration_section

    conn_str = db_utils.generate_connect_string(
        DATABASE_HOST,
        DATABASE_PORT,
        "submitty",
        DATABASE_USER,
        DATABASE_PASS,
    )

    engine = create_engine(conn_str)
    connection = engine.connect()
    metadata = MetaData(bind=engine)
    users_table = Table('users', metadata, autoload=True)
    select = users_table.select().where(users_table.c.user_id == bindparam('user_id'))
    user = connection.execute(select, user_id=user_id).fetchone()
    if user is None:
        print("User does not exist.", file=sys.stderr)
        return False

    courses_table = Table('courses', metadata, autoload=True)
    if registration_section and not registration_section.isdigit():
        registration_section = None
    select = courses_table.select().where(and_(
        courses_table.c.semester == bindparam('semester'),
        courses_table.c.course == bindparam('course')
    ))
    row = connection.execute(select, semester=semester, course=course).fetchone()
    # course does not exist, so just skip this argument
    if row is None:
        print("Course does not exist.", file=sys.stderr)
        return False

    courses_u_table = Table('courses_users', metadata, autoload=True)
    select = courses_u_table.select().where(and_(
        and_(
            courses_u_table.c.semester == bindparam('semester'),
            courses_u_table.c.course == bindparam('course')
        ),
        courses_u_table.c.user_id == bindparam('user_id')
    ))
    row = connection.execute(
        select,
        semester=semester,
        course=course,
        user_id=user_id
    ).fetchone()
    # does this user have a row in courses_users for this semester and course?
    if row is None:
        query = courses_u_table.insert()
        connection.execute(
            query,
            user_id=user_id,
            semester=semester,
            course=course,
            user_group=1,
            registration_section=registration_section
        )
    else:
        query = courses_u_table.update(values={
            courses_u_table.c.registration_section: bindparam('registration_section')
        }).where(courses_u_table.c.user_id == bindparam('b_user_id'))
        connection.execute(
            query,
            b_user_id=user_id,
            registration_section=registration_section
        )