~soren/nova/lp658257

« back to all changes in this revision

Viewing changes to nova/db/sqlalchemy/api.py

  • Committer: Tarmac
  • Author(s): Soren Hansen
  • Date: 2010-10-04 19:23:38 UTC
  • mfrom: (306.3.5 redisectomy)
  • Revision ID: hudson@openstack.org-20101004192338-ga19zarvlnbmvk2g
A shiny, new Auth driver backed by SQLAlchemy. Read it and weep. I did.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1278
1278
###################
1279
1279
 
1280
1280
 
 
1281
@require_admin_context
 
1282
def user_get(context, id, session=None):
 
1283
    if not session:
 
1284
        session = get_session()
 
1285
 
 
1286
    result = session.query(models.User
 
1287
                   ).filter_by(id=id
 
1288
                   ).filter_by(deleted=can_read_deleted(context)
 
1289
                   ).first()
 
1290
 
 
1291
    if not result:
 
1292
        raise exception.NotFound('No user for id %s' % id)
 
1293
 
 
1294
    return result
 
1295
 
 
1296
 
 
1297
@require_admin_context
 
1298
def user_get_by_access_key(context, access_key, session=None):
 
1299
    if not session:
 
1300
        session = get_session()
 
1301
 
 
1302
    result = session.query(models.User
 
1303
                 ).filter_by(access_key=access_key
 
1304
                 ).filter_by(deleted=can_read_deleted(context)
 
1305
                 ).first()
 
1306
 
 
1307
    if not result:
 
1308
        raise exception.NotFound('No user for id %s' % id)
 
1309
 
 
1310
    return result
 
1311
 
 
1312
 
 
1313
@require_admin_context
 
1314
def user_create(_context, values):
 
1315
    user_ref = models.User()
 
1316
    for (key, value) in values.iteritems():
 
1317
        user_ref[key] = value
 
1318
    user_ref.save()
 
1319
    return user_ref
 
1320
 
 
1321
 
 
1322
@require_admin_context
 
1323
def user_delete(context, id):
 
1324
    session = get_session()
 
1325
    with session.begin():
 
1326
        session.execute('delete from user_project_association where user_id=:id',
 
1327
                        {'id': id})
 
1328
        session.execute('delete from user_role_association where user_id=:id',
 
1329
                        {'id': id})
 
1330
        session.execute('delete from user_project_role_association where user_id=:id',
 
1331
                        {'id': id})
 
1332
        user_ref = user_get(context, id, session=session)
 
1333
        session.delete(user_ref)
 
1334
 
 
1335
 
 
1336
def user_get_all(context):
 
1337
    session = get_session()
 
1338
    return session.query(models.User
 
1339
                 ).filter_by(deleted=can_read_deleted(context)
 
1340
                 ).all()
 
1341
 
 
1342
 
 
1343
def project_create(_context, values):
 
1344
    project_ref = models.Project()
 
1345
    for (key, value) in values.iteritems():
 
1346
        project_ref[key] = value
 
1347
    project_ref.save()
 
1348
    return project_ref
 
1349
 
 
1350
 
 
1351
def project_add_member(context, project_id, user_id):
 
1352
    session = get_session()
 
1353
    with session.begin():
 
1354
        project_ref = project_get(context, project_id, session=session)
 
1355
        user_ref = user_get(context, user_id, session=session)
 
1356
 
 
1357
        project_ref.members += [user_ref]
 
1358
        project_ref.save(session=session)
 
1359
 
 
1360
 
 
1361
def project_get(context, id, session=None):
 
1362
    if not session:
 
1363
        session = get_session()
 
1364
 
 
1365
    result = session.query(models.Project
 
1366
                   ).filter_by(deleted=False
 
1367
                   ).filter_by(id=id
 
1368
                   ).options(joinedload_all('members')
 
1369
                   ).first()
 
1370
 
 
1371
    if not result:
 
1372
        raise exception.NotFound("No project with id %s" % id)
 
1373
 
 
1374
    return result
 
1375
 
 
1376
 
 
1377
def project_get_all(context):
 
1378
    session = get_session()
 
1379
    return session.query(models.Project
 
1380
                 ).filter_by(deleted=can_read_deleted(context)
 
1381
                 ).options(joinedload_all('members')
 
1382
                 ).all()
 
1383
 
 
1384
 
 
1385
def project_get_by_user(context, user_id):
 
1386
    session = get_session()
 
1387
    user = session.query(models.User
 
1388
                 ).filter_by(deleted=can_read_deleted(context)
 
1389
                 ).options(joinedload_all('projects')
 
1390
                 ).first()
 
1391
    return user.projects
 
1392
 
 
1393
 
 
1394
def project_remove_member(context, project_id, user_id):
 
1395
    session = get_session()
 
1396
    project = project_get(context, project_id, session=session)
 
1397
    user = user_get(context, user_id, session=session)
 
1398
 
 
1399
    if user in project.members:
 
1400
        project.members.remove(user)
 
1401
        project.save(session=session)
 
1402
 
 
1403
 
 
1404
def user_update(context, user_id, values):
 
1405
    session = get_session()
 
1406
    with session.begin():
 
1407
        user_ref = user_get(context, user_id, session=session)
 
1408
        for (key, value) in values.iteritems():
 
1409
            user_ref[key] = value
 
1410
        user_ref.save(session=session)
 
1411
 
 
1412
 
 
1413
def project_update(context, project_id, values):
 
1414
    session = get_session()
 
1415
    with session.begin():
 
1416
        project_ref = project_get(context, project_id, session=session)
 
1417
        for (key, value) in values.iteritems():
 
1418
            project_ref[key] = value
 
1419
        project_ref.save(session=session)
 
1420
 
 
1421
 
 
1422
def project_delete(context, id):
 
1423
    session = get_session()
 
1424
    with session.begin():
 
1425
        session.execute('delete from user_project_association where project_id=:id',
 
1426
                        {'id': id})
 
1427
        session.execute('delete from user_project_role_association where project_id=:id',
 
1428
                        {'id': id})
 
1429
        project_ref = project_get(context, id, session=session)
 
1430
        session.delete(project_ref)
 
1431
 
 
1432
 
 
1433
def user_get_roles(context, user_id):
 
1434
    session = get_session()
 
1435
    with session.begin():
 
1436
        user_ref = user_get(context, user_id, session=session)
 
1437
        return [role.role for role in user_ref['roles']]
 
1438
 
 
1439
 
 
1440
def user_get_roles_for_project(context, user_id, project_id):
 
1441
    session = get_session()
 
1442
    with session.begin():
 
1443
        res = session.query(models.UserProjectRoleAssociation
 
1444
                 ).filter_by(user_id=user_id
 
1445
                 ).filter_by(project_id=project_id
 
1446
                 ).all()
 
1447
        return [association.role for association in res]
 
1448
 
 
1449
def user_remove_project_role(context, user_id, project_id, role):
 
1450
    session = get_session()
 
1451
    with session.begin():
 
1452
        session.execute('delete from user_project_role_association where ' + \
 
1453
                        'user_id=:user_id and project_id=:project_id and ' + \
 
1454
                        'role=:role', { 'user_id'    : user_id, 
 
1455
                                        'project_id' : project_id,
 
1456
                                        'role'       : role })
 
1457
 
 
1458
 
 
1459
def user_remove_role(context, user_id, role):
 
1460
    session = get_session()
 
1461
    with session.begin():
 
1462
        res = session.query(models.UserRoleAssociation
 
1463
                  ).filter_by(user_id=user_id
 
1464
                  ).filter_by(role=role
 
1465
                  ).all()
 
1466
        for role in res:
 
1467
            session.delete(role)
 
1468
 
 
1469
 
 
1470
def user_add_role(context, user_id, role):
 
1471
    session = get_session()
 
1472
    with session.begin():
 
1473
        user_ref = user_get(context, user_id, session=session)
 
1474
        models.UserRoleAssociation(user=user_ref, role=role).save(session=session)
 
1475
 
 
1476
 
 
1477
def user_add_project_role(context, user_id, project_id, role):
 
1478
    session = get_session()
 
1479
    with session.begin():
 
1480
        user_ref = user_get(context, user_id, session=session)
 
1481
        project_ref = project_get(context, project_id, session=session)
 
1482
        models.UserProjectRoleAssociation(user_id=user_ref['id'],
 
1483
                                          project_id=project_ref['id'],
 
1484
                                          role=role).save(session=session)
 
1485
 
 
1486
 
 
1487
###################
 
1488
 
 
1489
 
1281
1490
def host_get_networks(context, host):
1282
1491
    session = get_session()
1283
1492
    with session.begin():