Merge lp:~eday/nova/pep8-fixes-db into lp:~hudson-openstack/nova/trunk

Proposed by Eric Day
Status: Merged
Approved by: Eric Day
Approved revision: 378
Merged at revision: 379
Proposed branch: lp:~eday/nova/pep8-fixes-db
Merge into: lp:~hudson-openstack/nova/trunk
Prerequisite: lp:~eday/nova/pep8-fixes-api
Diff against target: 1438 lines (+408/-386)
4 files modified
nova/db/api.py (+9/-3)
nova/db/sqlalchemy/api.py (+372/-363)
nova/db/sqlalchemy/models.py (+25/-19)
nova/db/sqlalchemy/session.py (+2/-1)
To merge this branch: bzr merge lp:~eday/nova/pep8-fixes-db
Reviewer Review Type Date Requested Status
Vish Ishaya (community) Approve
Jay Pipes (community) Approve
Review via email: mp+39110@code.launchpad.net

Description of the change

Another pep8 cleanup branch for nova/db, should be merged after lp:~eday/nova/pep8-fixes-api.

To post a comment you must log in.
Revision history for this message
Vish Ishaya (vishvananda) wrote :

lgtm. This was originally how we had the file, termie suggested that the other format was more 'pythonic', I don't really care either way but i'd like other people to weigh in before we merge this.

review: Needs Information
Revision history for this message
Eric Day (eday) wrote :

I like this way better personally, and as far as what is 'pythonic', pep8 complains about the extra whitespace before the ')' in the old way. There might be a way to suppress it for this file if we really want it the old way, but I hate having exceptions to well-known standards. :)

Revision history for this message
Jay Pipes (jaypipes) wrote :

lgtm. I don't really mind either style, frankly. :) But if this style doesn't piss of PEP8, then let's just go with this.

review: Approve
Revision history for this message
Vish Ishaya (vishvananda) wrote :

fine with me

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'nova/db/api.py'
--- nova/db/api.py 2010-10-14 06:17:40 +0000
+++ nova/db/api.py 2010-10-21 23:19:44 +0000
@@ -256,10 +256,12 @@
256 """Get all instances."""256 """Get all instances."""
257 return IMPL.instance_get_all(context)257 return IMPL.instance_get_all(context)
258258
259
259def instance_get_all_by_user(context, user_id):260def instance_get_all_by_user(context, user_id):
260 """Get all instances."""261 """Get all instances."""
261 return IMPL.instance_get_all_by_user(context, user_id)262 return IMPL.instance_get_all_by_user(context, user_id)
262263
264
263def instance_get_all_by_project(context, project_id):265def instance_get_all_by_project(context, project_id):
264 """Get all instance belonging to a project."""266 """Get all instance belonging to a project."""
265 return IMPL.instance_get_all_by_project(context, project_id)267 return IMPL.instance_get_all_by_project(context, project_id)
@@ -306,7 +308,8 @@
306308
307def instance_add_security_group(context, instance_id, security_group_id):309def instance_add_security_group(context, instance_id, security_group_id):
308 """Associate the given security group with the given instance"""310 """Associate the given security group with the given instance"""
309 return IMPL.instance_add_security_group(context, instance_id, security_group_id)311 return IMPL.instance_add_security_group(context, instance_id,
312 security_group_id)
310313
311314
312###################315###################
@@ -482,10 +485,12 @@
482 """Destroy an auth token"""485 """Destroy an auth token"""
483 return IMPL.auth_destroy_token(context, token)486 return IMPL.auth_destroy_token(context, token)
484487
488
485def auth_get_token(context, token_hash):489def auth_get_token(context, token_hash):
486 """Retrieves a token given the hash representing it"""490 """Retrieves a token given the hash representing it"""
487 return IMPL.auth_get_token(context, token_hash)491 return IMPL.auth_get_token(context, token_hash)
488492
493
489def auth_create_token(context, token):494def auth_create_token(context, token):
490 """Creates a new token"""495 """Creates a new token"""
491 return IMPL.auth_create_token(context, token)496 return IMPL.auth_create_token(context, token)
@@ -644,7 +649,9 @@
644649
645def security_group_rule_get_by_security_group(context, security_group_id):650def security_group_rule_get_by_security_group(context, security_group_id):
646 """Get all rules for a a given security group"""651 """Get all rules for a a given security group"""
647 return IMPL.security_group_rule_get_by_security_group(context, security_group_id)652 return IMPL.security_group_rule_get_by_security_group(context,
653 security_group_id)
654
648655
649def security_group_rule_destroy(context, security_group_rule_id):656def security_group_rule_destroy(context, security_group_rule_id):
650 """Deletes a security group rule"""657 """Deletes a security group rule"""
@@ -767,4 +774,3 @@
767 network host774 network host
768 """775 """
769 return IMPL.host_get_networks(context, host)776 return IMPL.host_get_networks(context, host)
770
771777
=== modified file 'nova/db/sqlalchemy/api.py'
--- nova/db/sqlalchemy/api.py 2010-10-14 06:26:58 +0000
+++ nova/db/sqlalchemy/api.py 2010-10-21 23:19:44 +0000
@@ -124,10 +124,10 @@
124 if not session:124 if not session:
125 session = get_session()125 session = get_session()
126126
127 result = session.query(models.Service127 result = session.query(models.Service).\
128 ).filter_by(id=service_id128 filter_by(id=service_id).\
129 ).filter_by(deleted=can_read_deleted(context)129 filter_by(deleted=can_read_deleted(context)).\
130 ).first()130 first()
131131
132 if not result:132 if not result:
133 raise exception.NotFound('No service for id %s' % service_id)133 raise exception.NotFound('No service for id %s' % service_id)
@@ -138,23 +138,23 @@
138@require_admin_context138@require_admin_context
139def service_get_all_by_topic(context, topic):139def service_get_all_by_topic(context, topic):
140 session = get_session()140 session = get_session()
141 return session.query(models.Service141 return session.query(models.Service).\
142 ).filter_by(deleted=False142 filter_by(deleted=False).\
143 ).filter_by(disabled=False143 filter_by(disabled=False).\
144 ).filter_by(topic=topic144 filter_by(topic=topic).\
145 ).all()145 all()
146146
147147
148@require_admin_context148@require_admin_context
149def _service_get_all_topic_subquery(context, session, topic, subq, label):149def _service_get_all_topic_subquery(context, session, topic, subq, label):
150 sort_value = getattr(subq.c, label)150 sort_value = getattr(subq.c, label)
151 return session.query(models.Service, func.coalesce(sort_value, 0)151 return session.query(models.Service, func.coalesce(sort_value, 0)).\
152 ).filter_by(topic=topic152 filter_by(topic=topic).\
153 ).filter_by(deleted=False153 filter_by(deleted=False).\
154 ).filter_by(disabled=False154 filter_by(disabled=False).\
155 ).outerjoin((subq, models.Service.host == subq.c.host)155 outerjoin((subq, models.Service.host == subq.c.host)).\
156 ).order_by(sort_value156 order_by(sort_value).\
157 ).all()157 all()
158158
159159
160@require_admin_context160@require_admin_context
@@ -171,10 +171,10 @@
171 topic = 'compute'171 topic = 'compute'
172 label = 'instance_cores'172 label = 'instance_cores'
173 subq = session.query(models.Instance.host,173 subq = session.query(models.Instance.host,
174 func.sum(models.Instance.vcpus).label(label)174 func.sum(models.Instance.vcpus).label(label)).\
175 ).filter_by(deleted=False175 filter_by(deleted=False).\
176 ).group_by(models.Instance.host176 group_by(models.Instance.host).\
177 ).subquery()177 subquery()
178 return _service_get_all_topic_subquery(context,178 return _service_get_all_topic_subquery(context,
179 session,179 session,
180 topic,180 topic,
@@ -189,10 +189,10 @@
189 topic = 'network'189 topic = 'network'
190 label = 'network_count'190 label = 'network_count'
191 subq = session.query(models.Network.host,191 subq = session.query(models.Network.host,
192 func.count(models.Network.id).label(label)192 func.count(models.Network.id).label(label)).\
193 ).filter_by(deleted=False193 filter_by(deleted=False).\
194 ).group_by(models.Network.host194 group_by(models.Network.host).\
195 ).subquery()195 subquery()
196 return _service_get_all_topic_subquery(context,196 return _service_get_all_topic_subquery(context,
197 session,197 session,
198 topic,198 topic,
@@ -207,10 +207,10 @@
207 topic = 'volume'207 topic = 'volume'
208 label = 'volume_gigabytes'208 label = 'volume_gigabytes'
209 subq = session.query(models.Volume.host,209 subq = session.query(models.Volume.host,
210 func.sum(models.Volume.size).label(label)210 func.sum(models.Volume.size).label(label)).\
211 ).filter_by(deleted=False211 filter_by(deleted=False).\
212 ).group_by(models.Volume.host212 group_by(models.Volume.host).\
213 ).subquery()213 subquery()
214 return _service_get_all_topic_subquery(context,214 return _service_get_all_topic_subquery(context,
215 session,215 session,
216 topic,216 topic,
@@ -221,11 +221,11 @@
221@require_admin_context221@require_admin_context
222def service_get_by_args(context, host, binary):222def service_get_by_args(context, host, binary):
223 session = get_session()223 session = get_session()
224 result = session.query(models.Service224 result = session.query(models.Service).\
225 ).filter_by(host=host225 filter_by(host=host).\
226 ).filter_by(binary=binary226 filter_by(binary=binary).\
227 ).filter_by(deleted=can_read_deleted(context)227 filter_by(deleted=can_read_deleted(context)).\
228 ).first()228 first()
229 if not result:229 if not result:
230 raise exception.NotFound('No service for %s, %s' % (host, binary))230 raise exception.NotFound('No service for %s, %s' % (host, binary))
231231
@@ -259,13 +259,13 @@
259 authorize_project_context(context, project_id)259 authorize_project_context(context, project_id)
260 session = get_session()260 session = get_session()
261 with session.begin():261 with session.begin():
262 floating_ip_ref = session.query(models.FloatingIp262 floating_ip_ref = session.query(models.FloatingIp).\
263 ).filter_by(host=host263 filter_by(host=host).\
264 ).filter_by(fixed_ip_id=None264 filter_by(fixed_ip_id=None).\
265 ).filter_by(project_id=None265 filter_by(project_id=None).\
266 ).filter_by(deleted=False266 filter_by(deleted=False).\
267 ).with_lockmode('update'267 with_lockmode('update').\
268 ).first()268 first()
269 # NOTE(vish): if with_lockmode isn't supported, as in sqlite,269 # NOTE(vish): if with_lockmode isn't supported, as in sqlite,
270 # then this has concurrency issues270 # then this has concurrency issues
271 if not floating_ip_ref:271 if not floating_ip_ref:
@@ -288,10 +288,10 @@
288def floating_ip_count_by_project(context, project_id):288def floating_ip_count_by_project(context, project_id):
289 authorize_project_context(context, project_id)289 authorize_project_context(context, project_id)
290 session = get_session()290 session = get_session()
291 return session.query(models.FloatingIp291 return session.query(models.FloatingIp).\
292 ).filter_by(project_id=project_id292 filter_by(project_id=project_id).\
293 ).filter_by(deleted=False293 filter_by(deleted=False).\
294 ).count()294 count()
295295
296296
297@require_context297@require_context
@@ -354,31 +354,31 @@
354@require_admin_context354@require_admin_context
355def floating_ip_get_all(context):355def floating_ip_get_all(context):
356 session = get_session()356 session = get_session()
357 return session.query(models.FloatingIp357 return session.query(models.FloatingIp).\
358 ).options(joinedload_all('fixed_ip.instance')358 options(joinedload_all('fixed_ip.instance')).\
359 ).filter_by(deleted=False359 filter_by(deleted=False).\
360 ).all()360 all()
361361
362362
363@require_admin_context363@require_admin_context
364def floating_ip_get_all_by_host(context, host):364def floating_ip_get_all_by_host(context, host):
365 session = get_session()365 session = get_session()
366 return session.query(models.FloatingIp366 return session.query(models.FloatingIp).\
367 ).options(joinedload_all('fixed_ip.instance')367 options(joinedload_all('fixed_ip.instance')).\
368 ).filter_by(host=host368 filter_by(host=host).\
369 ).filter_by(deleted=False369 filter_by(deleted=False).\
370 ).all()370 all()
371371
372372
373@require_context373@require_context
374def floating_ip_get_all_by_project(context, project_id):374def floating_ip_get_all_by_project(context, project_id):
375 authorize_project_context(context, project_id)375 authorize_project_context(context, project_id)
376 session = get_session()376 session = get_session()
377 return session.query(models.FloatingIp377 return session.query(models.FloatingIp).\
378 ).options(joinedload_all('fixed_ip.instance')378 options(joinedload_all('fixed_ip.instance')).\
379 ).filter_by(project_id=project_id379 filter_by(project_id=project_id).\
380 ).filter_by(deleted=False380 filter_by(deleted=False).\
381 ).all()381 all()
382382
383383
384@require_context384@require_context
@@ -387,10 +387,10 @@
387 if not session:387 if not session:
388 session = get_session()388 session = get_session()
389389
390 result = session.query(models.FloatingIp390 result = session.query(models.FloatingIp).\
391 ).filter_by(address=address391 filter_by(address=address).\
392 ).filter_by(deleted=can_read_deleted(context)392 filter_by(deleted=can_read_deleted(context)).\
393 ).first()393 first()
394 if not result:394 if not result:
395 raise exception.NotFound('No fixed ip for address %s' % address)395 raise exception.NotFound('No fixed ip for address %s' % address)
396396
@@ -405,12 +405,12 @@
405 session = get_session()405 session = get_session()
406 with session.begin():406 with session.begin():
407 instance = instance_get(context, instance_id, session=session)407 instance = instance_get(context, instance_id, session=session)
408 fixed_ip_ref = session.query(models.FixedIp408 fixed_ip_ref = session.query(models.FixedIp).\
409 ).filter_by(address=address409 filter_by(address=address).\
410 ).filter_by(deleted=False410 filter_by(deleted=False).\
411 ).filter_by(instance=None411 filter_by(instance=None).\
412 ).with_lockmode('update'412 with_lockmode('update').\
413 ).first()413 first()
414 # NOTE(vish): if with_lockmode isn't supported, as in sqlite,414 # NOTE(vish): if with_lockmode isn't supported, as in sqlite,
415 # then this has concurrency issues415 # then this has concurrency issues
416 if not fixed_ip_ref:416 if not fixed_ip_ref:
@@ -425,13 +425,13 @@
425 with session.begin():425 with session.begin():
426 network_or_none = or_(models.FixedIp.network_id == network_id,426 network_or_none = or_(models.FixedIp.network_id == network_id,
427 models.FixedIp.network_id == None)427 models.FixedIp.network_id == None)
428 fixed_ip_ref = session.query(models.FixedIp428 fixed_ip_ref = session.query(models.FixedIp).\
429 ).filter(network_or_none429 filter(network_or_none).\
430 ).filter_by(reserved=False430 filter_by(reserved=False).\
431 ).filter_by(deleted=False431 filter_by(deleted=False).\
432 ).filter_by(instance=None432 filter_by(instance=None).\
433 ).with_lockmode('update'433 with_lockmode('update').\
434 ).first()434 first()
435 # NOTE(vish): if with_lockmode isn't supported, as in sqlite,435 # NOTE(vish): if with_lockmode isn't supported, as in sqlite,
436 # then this has concurrency issues436 # then this has concurrency issues
437 if not fixed_ip_ref:437 if not fixed_ip_ref:
@@ -455,6 +455,7 @@
455 fixed_ip_ref.save()455 fixed_ip_ref.save()
456 return fixed_ip_ref['address']456 return fixed_ip_ref['address']
457457
458
458@require_context459@require_context
459def fixed_ip_disassociate(context, address):460def fixed_ip_disassociate(context, address):
460 session = get_session()461 session = get_session()
@@ -465,6 +466,7 @@
465 fixed_ip_ref.instance = None466 fixed_ip_ref.instance = None
466 fixed_ip_ref.save(session=session)467 fixed_ip_ref.save(session=session)
467468
469
468@require_admin_context470@require_admin_context
469def fixed_ip_disassociate_all_by_timeout(_context, host, time):471def fixed_ip_disassociate_all_by_timeout(_context, host, time):
470 session = get_session()472 session = get_session()
@@ -486,12 +488,12 @@
486def fixed_ip_get_by_address(context, address, session=None):488def fixed_ip_get_by_address(context, address, session=None):
487 if not session:489 if not session:
488 session = get_session()490 session = get_session()
489 result = session.query(models.FixedIp491 result = session.query(models.FixedIp).\
490 ).filter_by(address=address492 filter_by(address=address).\
491 ).filter_by(deleted=can_read_deleted(context)493 filter_by(deleted=can_read_deleted(context)).\
492 ).options(joinedload('network')494 options(joinedload('network')).\
493 ).options(joinedload('instance')495 options(joinedload('instance')).\
494 ).first()496 first()
495 if not result:497 if not result:
496 raise exception.NotFound('No floating ip for address %s' % address)498 raise exception.NotFound('No floating ip for address %s' % address)
497499
@@ -552,10 +554,10 @@
552def instance_data_get_for_project(context, project_id):554def instance_data_get_for_project(context, project_id):
553 session = get_session()555 session = get_session()
554 result = session.query(func.count(models.Instance.id),556 result = session.query(func.count(models.Instance.id),
555 func.sum(models.Instance.vcpus)557 func.sum(models.Instance.vcpus)).\
556 ).filter_by(project_id=project_id558 filter_by(project_id=project_id).\
557 ).filter_by(deleted=False559 filter_by(deleted=False).\
558 ).first()560 first()
559 # NOTE(vish): convert None to 0561 # NOTE(vish): convert None to 0
560 return (result[0] or 0, result[1] or 0)562 return (result[0] or 0, result[1] or 0)
561563
@@ -575,18 +577,18 @@
575 result = None577 result = None
576578
577 if is_admin_context(context):579 if is_admin_context(context):
578 result = session.query(models.Instance580 result = session.query(models.Instance).\
579 ).options(joinedload('security_groups')581 options(joinedload('security_groups')).\
580 ).filter_by(id=instance_id582 filter_by(id=instance_id).\
581 ).filter_by(deleted=can_read_deleted(context)583 filter_by(deleted=can_read_deleted(context)).\
582 ).first()584 first()
583 elif is_user_context(context):585 elif is_user_context(context):
584 result = session.query(models.Instance586 result = session.query(models.Instance).\
585 ).options(joinedload('security_groups')587 options(joinedload('security_groups')).\
586 ).filter_by(project_id=context.project_id588 filter_by(project_id=context.project_id).\
587 ).filter_by(id=instance_id589 filter_by(id=instance_id).\
588 ).filter_by(deleted=False590 filter_by(deleted=False).\
589 ).first()591 first()
590 if not result:592 if not result:
591 raise exception.NotFound('No instance for id %s' % instance_id)593 raise exception.NotFound('No instance for id %s' % instance_id)
592594
@@ -596,22 +598,22 @@
596@require_admin_context598@require_admin_context
597def instance_get_all(context):599def instance_get_all(context):
598 session = get_session()600 session = get_session()
599 return session.query(models.Instance601 return session.query(models.Instance).\
600 ).options(joinedload_all('fixed_ip.floating_ips')602 options(joinedload_all('fixed_ip.floating_ips')).\
601 ).options(joinedload('security_groups')603 options(joinedload('security_groups')).\
602 ).filter_by(deleted=can_read_deleted(context)604 filter_by(deleted=can_read_deleted(context)).\
603 ).all()605 all()
604606
605607
606@require_admin_context608@require_admin_context
607def instance_get_all_by_user(context, user_id):609def instance_get_all_by_user(context, user_id):
608 session = get_session()610 session = get_session()
609 return session.query(models.Instance611 return session.query(models.Instance).\
610 ).options(joinedload_all('fixed_ip.floating_ips')612 options(joinedload_all('fixed_ip.floating_ips')).\
611 ).options(joinedload('security_groups')613 options(joinedload('security_groups')).\
612 ).filter_by(deleted=can_read_deleted(context)614 filter_by(deleted=can_read_deleted(context)).\
613 ).filter_by(user_id=user_id615 filter_by(user_id=user_id).\
614 ).all()616 all()
615617
616618
617@require_context619@require_context
@@ -619,12 +621,12 @@
619 authorize_project_context(context, project_id)621 authorize_project_context(context, project_id)
620622
621 session = get_session()623 session = get_session()
622 return session.query(models.Instance624 return session.query(models.Instance).\
623 ).options(joinedload_all('fixed_ip.floating_ips')625 options(joinedload_all('fixed_ip.floating_ips')).\
624 ).options(joinedload('security_groups')626 options(joinedload('security_groups')).\
625 ).filter_by(project_id=project_id627 filter_by(project_id=project_id).\
626 ).filter_by(deleted=can_read_deleted(context)628 filter_by(deleted=can_read_deleted(context)).\
627 ).all()629 all()
628630
629631
630@require_context632@require_context
@@ -632,20 +634,20 @@
632 session = get_session()634 session = get_session()
633635
634 if is_admin_context(context):636 if is_admin_context(context):
635 return session.query(models.Instance637 return session.query(models.Instance).\
636 ).options(joinedload_all('fixed_ip.floating_ips')638 options(joinedload_all('fixed_ip.floating_ips')).\
637 ).options(joinedload('security_groups')639 options(joinedload('security_groups')).\
638 ).filter_by(reservation_id=reservation_id640 filter_by(reservation_id=reservation_id).\
639 ).filter_by(deleted=can_read_deleted(context)641 filter_by(deleted=can_read_deleted(context)).\
640 ).all()642 all()
641 elif is_user_context(context):643 elif is_user_context(context):
642 return session.query(models.Instance644 return session.query(models.Instance).\
643 ).options(joinedload_all('fixed_ip.floating_ips')645 options(joinedload_all('fixed_ip.floating_ips')).\
644 ).options(joinedload('security_groups')646 options(joinedload('security_groups')).\
645 ).filter_by(project_id=context.project_id647 filter_by(project_id=context.project_id).\
646 ).filter_by(reservation_id=reservation_id648 filter_by(reservation_id=reservation_id).\
647 ).filter_by(deleted=False649 filter_by(deleted=False).\
648 ).all()650 all()
649651
650652
651@require_context653@require_context
@@ -653,18 +655,18 @@
653 session = get_session()655 session = get_session()
654656
655 if is_admin_context(context):657 if is_admin_context(context):
656 result = session.query(models.Instance658 result = session.query(models.Instance).\
657 ).options(joinedload('security_groups')659 options(joinedload('security_groups')).\
658 ).filter_by(internal_id=internal_id660 filter_by(internal_id=internal_id).\
659 ).filter_by(deleted=can_read_deleted(context)661 filter_by(deleted=can_read_deleted(context)).\
660 ).first()662 first()
661 elif is_user_context(context):663 elif is_user_context(context):
662 result = session.query(models.Instance664 result = session.query(models.Instance).\
663 ).options(joinedload('security_groups')665 options(joinedload('security_groups')).\
664 ).filter_by(project_id=context.project_id666 filter_by(project_id=context.project_id).\
665 ).filter_by(internal_id=internal_id667 filter_by(internal_id=internal_id).\
666 ).filter_by(deleted=False668 filter_by(deleted=False).\
667 ).first()669 first()
668 if not result:670 if not result:
669 raise exception.NotFound('Instance %s not found' % (internal_id))671 raise exception.NotFound('Instance %s not found' % (internal_id))
670672
@@ -675,9 +677,9 @@
675def instance_internal_id_exists(context, internal_id, session=None):677def instance_internal_id_exists(context, internal_id, session=None):
676 if not session:678 if not session:
677 session = get_session()679 session = get_session()
678 return session.query(680 return session.query(exists().\
679 exists().where(models.Instance.internal_id==internal_id)681 where(models.Instance.internal_id == internal_id)).\
680 ).one()[0]682 one()[0]
681683
682684
683@require_context685@require_context
@@ -782,11 +784,11 @@
782 if not session:784 if not session:
783 session = get_session()785 session = get_session()
784786
785 result = session.query(models.KeyPair787 result = session.query(models.KeyPair).\
786 ).filter_by(user_id=user_id788 filter_by(user_id=user_id).\
787 ).filter_by(name=name789 filter_by(name=name).\
788 ).filter_by(deleted=can_read_deleted(context)790 filter_by(deleted=can_read_deleted(context)).\
789 ).first()791 first()
790 if not result:792 if not result:
791 raise exception.NotFound('no keypair for user %s, name %s' %793 raise exception.NotFound('no keypair for user %s, name %s' %
792 (user_id, name))794 (user_id, name))
@@ -797,10 +799,10 @@
797def key_pair_get_all_by_user(context, user_id):799def key_pair_get_all_by_user(context, user_id):
798 authorize_user_context(context, user_id)800 authorize_user_context(context, user_id)
799 session = get_session()801 session = get_session()
800 return session.query(models.KeyPair802 return session.query(models.KeyPair).\
801 ).filter_by(user_id=user_id803 filter_by(user_id=user_id).\
802 ).filter_by(deleted=False804 filter_by(deleted=False).\
803 ).all()805 all()
804806
805807
806###################808###################
@@ -810,11 +812,11 @@
810def network_associate(context, project_id):812def network_associate(context, project_id):
811 session = get_session()813 session = get_session()
812 with session.begin():814 with session.begin():
813 network_ref = session.query(models.Network815 network_ref = session.query(models.Network).\
814 ).filter_by(deleted=False816 filter_by(deleted=False).\
815 ).filter_by(project_id=None817 filter_by(project_id=None).\
816 ).with_lockmode('update'818 with_lockmode('update').\
817 ).first()819 first()
818 # NOTE(vish): if with_lockmode isn't supported, as in sqlite,820 # NOTE(vish): if with_lockmode isn't supported, as in sqlite,
819 # then this has concurrency issues821 # then this has concurrency issues
820 if not network_ref:822 if not network_ref:
@@ -827,40 +829,40 @@
827@require_admin_context829@require_admin_context
828def network_count(context):830def network_count(context):
829 session = get_session()831 session = get_session()
830 return session.query(models.Network832 return session.query(models.Network).\
831 ).filter_by(deleted=can_read_deleted(context)833 filter_by(deleted=can_read_deleted(context)).\
832 ).count()834 count()
833835
834836
835@require_admin_context837@require_admin_context
836def network_count_allocated_ips(context, network_id):838def network_count_allocated_ips(context, network_id):
837 session = get_session()839 session = get_session()
838 return session.query(models.FixedIp840 return session.query(models.FixedIp).\
839 ).filter_by(network_id=network_id841 filter_by(network_id=network_id).\
840 ).filter_by(allocated=True842 filter_by(allocated=True).\
841 ).filter_by(deleted=False843 filter_by(deleted=False).\
842 ).count()844 count()
843845
844846
845@require_admin_context847@require_admin_context
846def network_count_available_ips(context, network_id):848def network_count_available_ips(context, network_id):
847 session = get_session()849 session = get_session()
848 return session.query(models.FixedIp850 return session.query(models.FixedIp).\
849 ).filter_by(network_id=network_id851 filter_by(network_id=network_id).\
850 ).filter_by(allocated=False852 filter_by(allocated=False).\
851 ).filter_by(reserved=False853 filter_by(reserved=False).\
852 ).filter_by(deleted=False854 filter_by(deleted=False).\
853 ).count()855 count()
854856
855857
856@require_admin_context858@require_admin_context
857def network_count_reserved_ips(context, network_id):859def network_count_reserved_ips(context, network_id):
858 session = get_session()860 session = get_session()
859 return session.query(models.FixedIp861 return session.query(models.FixedIp).\
860 ).filter_by(network_id=network_id862 filter_by(network_id=network_id).\
861 ).filter_by(reserved=True863 filter_by(reserved=True).\
862 ).filter_by(deleted=False864 filter_by(deleted=False).\
863 ).count()865 count()
864866
865867
866@require_admin_context868@require_admin_context
@@ -893,16 +895,16 @@
893 result = None895 result = None
894896
895 if is_admin_context(context):897 if is_admin_context(context):
896 result = session.query(models.Network898 result = session.query(models.Network).\
897 ).filter_by(id=network_id899 filter_by(id=network_id).\
898 ).filter_by(deleted=can_read_deleted(context)900 filter_by(deleted=can_read_deleted(context)).\
899 ).first()901 first()
900 elif is_user_context(context):902 elif is_user_context(context):
901 result = session.query(models.Network903 result = session.query(models.Network).\
902 ).filter_by(project_id=context.project_id904 filter_by(project_id=context.project_id).\
903 ).filter_by(id=network_id905 filter_by(id=network_id).\
904 ).filter_by(deleted=False906 filter_by(deleted=False).\
905 ).first()907 first()
906 if not result:908 if not result:
907 raise exception.NotFound('No network for id %s' % network_id)909 raise exception.NotFound('No network for id %s' % network_id)
908910
@@ -915,21 +917,21 @@
915@require_admin_context917@require_admin_context
916def network_get_associated_fixed_ips(context, network_id):918def network_get_associated_fixed_ips(context, network_id):
917 session = get_session()919 session = get_session()
918 return session.query(models.FixedIp920 return session.query(models.FixedIp).\
919 ).options(joinedload_all('instance')921 options(joinedload_all('instance')).\
920 ).filter_by(network_id=network_id922 filter_by(network_id=network_id).\
921 ).filter(models.FixedIp.instance_id != None923 filter(models.FixedIp.instance_id != None).\
922 ).filter_by(deleted=False924 filter_by(deleted=False).\
923 ).all()925 all()
924926
925927
926@require_admin_context928@require_admin_context
927def network_get_by_bridge(context, bridge):929def network_get_by_bridge(context, bridge):
928 session = get_session()930 session = get_session()
929 result = session.query(models.Network931 result = session.query(models.Network).\
930 ).filter_by(bridge=bridge932 filter_by(bridge=bridge).\
931 ).filter_by(deleted=False933 filter_by(deleted=False).\
932 ).first()934 first()
933935
934 if not result:936 if not result:
935 raise exception.NotFound('No network for bridge %s' % bridge)937 raise exception.NotFound('No network for bridge %s' % bridge)
@@ -939,12 +941,12 @@
939@require_admin_context941@require_admin_context
940def network_get_by_instance(_context, instance_id):942def network_get_by_instance(_context, instance_id):
941 session = get_session()943 session = get_session()
942 rv = session.query(models.Network944 rv = session.query(models.Network).\
943 ).filter_by(deleted=False945 filter_by(deleted=False).\
944 ).join(models.Network.fixed_ips946 join(models.Network.fixed_ips).\
945 ).filter_by(instance_id=instance_id947 filter_by(instance_id=instance_id).\
946 ).filter_by(deleted=False948 filter_by(deleted=False).\
947 ).first()949 first()
948 if not rv:950 if not rv:
949 raise exception.NotFound('No network for instance %s' % instance_id)951 raise exception.NotFound('No network for instance %s' % instance_id)
950 return rv952 return rv
@@ -954,11 +956,11 @@
954def network_set_host(context, network_id, host_id):956def network_set_host(context, network_id, host_id):
955 session = get_session()957 session = get_session()
956 with session.begin():958 with session.begin():
957 network_ref = session.query(models.Network959 network_ref = session.query(models.Network).\
958 ).filter_by(id=network_id960 filter_by(id=network_id).\
959 ).filter_by(deleted=False961 filter_by(deleted=False).\
960 ).with_lockmode('update'962 with_lockmode('update').\
961 ).first()963 first()
962 if not network_ref:964 if not network_ref:
963 raise exception.NotFound('No network for id %s' % network_id)965 raise exception.NotFound('No network for id %s' % network_id)
964966
@@ -987,10 +989,10 @@
987@require_context989@require_context
988def project_get_network(context, project_id):990def project_get_network(context, project_id):
989 session = get_session()991 session = get_session()
990 rv = session.query(models.Network992 rv = session.query(models.Network).\
991 ).filter_by(project_id=project_id993 filter_by(project_id=project_id).\
992 ).filter_by(deleted=False994 filter_by(deleted=False).\
993 ).first()995 first()
994 if not rv:996 if not rv:
995 try:997 try:
996 return network_associate(context, project_id)998 return network_associate(context, project_id)
@@ -998,10 +1000,10 @@
998 # NOTE(vish): We hit this if there is a race and two1000 # NOTE(vish): We hit this if there is a race and two
999 # processes are attempting to allocate the1001 # processes are attempting to allocate the
1000 # network at the same time1002 # network at the same time
1001 rv = session.query(models.Network1003 rv = session.query(models.Network).\
1002 ).filter_by(project_id=project_id1004 filter_by(project_id=project_id).\
1003 ).filter_by(deleted=False1005 filter_by(deleted=False).\
1004 ).first()1006 first()
1005 return rv1007 return rv
10061008
10071009
@@ -1019,9 +1021,9 @@
1019@require_admin_context1021@require_admin_context
1020def export_device_count(context):1022def export_device_count(context):
1021 session = get_session()1023 session = get_session()
1022 return session.query(models.ExportDevice1024 return session.query(models.ExportDevice).\
1023 ).filter_by(deleted=can_read_deleted(context)1025 filter_by(deleted=can_read_deleted(context)).\
1024 ).count()1026 count()
10251027
10261028
1027@require_admin_context1029@require_admin_context
@@ -1043,18 +1045,20 @@
1043 session = get_session()1045 session = get_session()
1044 session.delete(token)1046 session.delete(token)
10451047
1048
1046def auth_get_token(_context, token_hash):1049def auth_get_token(_context, token_hash):
1047 session = get_session()1050 session = get_session()
1048 tk = session.query(models.AuthToken1051 tk = session.query(models.AuthToken).\
1049 ).filter_by(token_hash=token_hash1052 filter_by(token_hash=token_hash).\
1050 ).first()1053 first()
1051 if not tk:1054 if not tk:
1052 raise exception.NotFound('Token %s does not exist' % token_hash)1055 raise exception.NotFound('Token %s does not exist' % token_hash)
1053 return tk1056 return tk
10541057
1058
1055def auth_create_token(_context, token):1059def auth_create_token(_context, token):
1056 tk = models.AuthToken()1060 tk = models.AuthToken()
1057 for k,v in token.iteritems():1061 for k, v in token.iteritems():
1058 tk[k] = v1062 tk[k] = v
1059 tk.save()1063 tk.save()
1060 return tk1064 return tk
@@ -1068,10 +1072,10 @@
1068 if not session:1072 if not session:
1069 session = get_session()1073 session = get_session()
10701074
1071 result = session.query(models.Quota1075 result = session.query(models.Quota).\
1072 ).filter_by(project_id=project_id1076 filter_by(project_id=project_id).\
1073 ).filter_by(deleted=can_read_deleted(context)1077 filter_by(deleted=can_read_deleted(context)).\
1074 ).first()1078 first()
1075 if not result:1079 if not result:
1076 raise exception.NotFound('No quota for project_id %s' % project_id)1080 raise exception.NotFound('No quota for project_id %s' % project_id)
10771081
@@ -1112,11 +1116,11 @@
1112def volume_allocate_shelf_and_blade(context, volume_id):1116def volume_allocate_shelf_and_blade(context, volume_id):
1113 session = get_session()1117 session = get_session()
1114 with session.begin():1118 with session.begin():
1115 export_device = session.query(models.ExportDevice1119 export_device = session.query(models.ExportDevice).\
1116 ).filter_by(volume=None1120 filter_by(volume=None).\
1117 ).filter_by(deleted=False1121 filter_by(deleted=False).\
1118 ).with_lockmode('update'1122 with_lockmode('update').\
1119 ).first()1123 first()
1120 # NOTE(vish): if with_lockmode isn't supported, as in sqlite,1124 # NOTE(vish): if with_lockmode isn't supported, as in sqlite,
1121 # then this has concurrency issues1125 # then this has concurrency issues
1122 if not export_device:1126 if not export_device:
@@ -1134,7 +1138,8 @@
1134 volume_ref['status'] = 'in-use'1138 volume_ref['status'] = 'in-use'
1135 volume_ref['mountpoint'] = mountpoint1139 volume_ref['mountpoint'] = mountpoint
1136 volume_ref['attach_status'] = 'attached'1140 volume_ref['attach_status'] = 'attached'
1137 volume_ref.instance = instance_get(context, instance_id, session=session)1141 volume_ref.instance = instance_get(context, instance_id,
1142 session=session)
1138 volume_ref.save(session=session)1143 volume_ref.save(session=session)
11391144
11401145
@@ -1158,10 +1163,10 @@
1158def volume_data_get_for_project(context, project_id):1163def volume_data_get_for_project(context, project_id):
1159 session = get_session()1164 session = get_session()
1160 result = session.query(func.count(models.Volume.id),1165 result = session.query(func.count(models.Volume.id),
1161 func.sum(models.Volume.size)1166 func.sum(models.Volume.size)).\
1162 ).filter_by(project_id=project_id1167 filter_by(project_id=project_id).\
1163 ).filter_by(deleted=False1168 filter_by(deleted=False).\
1164 ).first()1169 first()
1165 # NOTE(vish): convert None to 01170 # NOTE(vish): convert None to 0
1166 return (result[0] or 0, result[1] or 0)1171 return (result[0] or 0, result[1] or 0)
11671172
@@ -1197,16 +1202,16 @@
1197 result = None1202 result = None
11981203
1199 if is_admin_context(context):1204 if is_admin_context(context):
1200 result = session.query(models.Volume1205 result = session.query(models.Volume).\
1201 ).filter_by(id=volume_id1206 filter_by(id=volume_id).\
1202 ).filter_by(deleted=can_read_deleted(context)1207 filter_by(deleted=can_read_deleted(context)).\
1203 ).first()1208 first()
1204 elif is_user_context(context):1209 elif is_user_context(context):
1205 result = session.query(models.Volume1210 result = session.query(models.Volume).\
1206 ).filter_by(project_id=context.project_id1211 filter_by(project_id=context.project_id).\
1207 ).filter_by(id=volume_id1212 filter_by(id=volume_id).\
1208 ).filter_by(deleted=False1213 filter_by(deleted=False).\
1209 ).first()1214 first()
1210 if not result:1215 if not result:
1211 raise exception.NotFound('No volume for id %s' % volume_id)1216 raise exception.NotFound('No volume for id %s' % volume_id)
12121217
@@ -1216,19 +1221,20 @@
1216@require_admin_context1221@require_admin_context
1217def volume_get_all(context):1222def volume_get_all(context):
1218 session = get_session()1223 session = get_session()
1219 return session.query(models.Volume1224 return session.query(models.Volume).\
1220 ).filter_by(deleted=can_read_deleted(context)1225 filter_by(deleted=can_read_deleted(context)).\
1221 ).all()1226 all()
1227
12221228
1223@require_context1229@require_context
1224def volume_get_all_by_project(context, project_id):1230def volume_get_all_by_project(context, project_id):
1225 authorize_project_context(context, project_id)1231 authorize_project_context(context, project_id)
12261232
1227 session = get_session()1233 session = get_session()
1228 return session.query(models.Volume1234 return session.query(models.Volume).\
1229 ).filter_by(project_id=project_id1235 filter_by(project_id=project_id).\
1230 ).filter_by(deleted=can_read_deleted(context)1236 filter_by(deleted=can_read_deleted(context)).\
1231 ).all()1237 all()
12321238
12331239
1234@require_context1240@require_context
@@ -1237,16 +1243,16 @@
1237 result = None1243 result = None
12381244
1239 if is_admin_context(context):1245 if is_admin_context(context):
1240 result = session.query(models.Volume1246 result = session.query(models.Volume).\
1241 ).filter_by(ec2_id=ec2_id1247 filter_by(ec2_id=ec2_id).\
1242 ).filter_by(deleted=can_read_deleted(context)1248 filter_by(deleted=can_read_deleted(context)).\
1243 ).first()1249 first()
1244 elif is_user_context(context):1250 elif is_user_context(context):
1245 result = session.query(models.Volume1251 result = session.query(models.Volume).\
1246 ).filter_by(project_id=context.project_id1252 filter_by(project_id=context.project_id).\
1247 ).filter_by(ec2_id=ec2_id1253 filter_by(ec2_id=ec2_id).\
1248 ).filter_by(deleted=False1254 filter_by(deleted=False).\
1249 ).first()1255 first()
1250 else:1256 else:
1251 raise exception.NotAuthorized()1257 raise exception.NotAuthorized()
12521258
@@ -1261,19 +1267,19 @@
1261 if not session:1267 if not session:
1262 session = get_session()1268 session = get_session()
12631269
1264 return session.query(exists(1270 return session.query(exists().\
1265 ).where(models.Volume.id==ec2_id)1271 where(models.Volume.id == ec2_id)).\
1266 ).one()[0]1272 one()[0]
12671273
12681274
1269@require_admin_context1275@require_admin_context
1270def volume_get_instance(context, volume_id):1276def volume_get_instance(context, volume_id):
1271 session = get_session()1277 session = get_session()
1272 result = session.query(models.Volume1278 result = session.query(models.Volume).\
1273 ).filter_by(id=volume_id1279 filter_by(id=volume_id).\
1274 ).filter_by(deleted=can_read_deleted(context)1280 filter_by(deleted=can_read_deleted(context)).\
1275 ).options(joinedload('instance')1281 options(joinedload('instance')).\
1276 ).first()1282 first()
1277 if not result:1283 if not result:
1278 raise exception.NotFound('Volume %s not found' % ec2_id)1284 raise exception.NotFound('Volume %s not found' % ec2_id)
12791285
@@ -1283,9 +1289,9 @@
1283@require_admin_context1289@require_admin_context
1284def volume_get_shelf_and_blade(context, volume_id):1290def volume_get_shelf_and_blade(context, volume_id):
1285 session = get_session()1291 session = get_session()
1286 result = session.query(models.ExportDevice1292 result = session.query(models.ExportDevice).\
1287 ).filter_by(volume_id=volume_id1293 filter_by(volume_id=volume_id).\
1288 ).first()1294 first()
1289 if not result:1295 if not result:
1290 raise exception.NotFound('No export device found for volume %s' %1296 raise exception.NotFound('No export device found for volume %s' %
1291 volume_id)1297 volume_id)
@@ -1309,10 +1315,10 @@
1309@require_context1315@require_context
1310def security_group_get_all(context):1316def security_group_get_all(context):
1311 session = get_session()1317 session = get_session()
1312 return session.query(models.SecurityGroup1318 return session.query(models.SecurityGroup).\
1313 ).filter_by(deleted=can_read_deleted(context)1319 filter_by(deleted=can_read_deleted(context)).\
1314 ).options(joinedload_all('rules')1320 options(joinedload_all('rules')).\
1315 ).all()1321 all()
13161322
13171323
1318@require_context1324@require_context
@@ -1320,18 +1326,18 @@
1320 if not session:1326 if not session:
1321 session = get_session()1327 session = get_session()
1322 if is_admin_context(context):1328 if is_admin_context(context):
1323 result = session.query(models.SecurityGroup1329 result = session.query(models.SecurityGroup).\
1324 ).filter_by(deleted=can_read_deleted(context),1330 filter_by(deleted=can_read_deleted(context),).\
1325 ).filter_by(id=security_group_id1331 filter_by(id=security_group_id).\
1326 ).options(joinedload_all('rules')1332 options(joinedload_all('rules')).\
1327 ).first()1333 first()
1328 else:1334 else:
1329 result = session.query(models.SecurityGroup1335 result = session.query(models.SecurityGroup).\
1330 ).filter_by(deleted=False1336 filter_by(deleted=False).\
1331 ).filter_by(id=security_group_id1337 filter_by(id=security_group_id).\
1332 ).filter_by(project_id=context.project_id1338 filter_by(project_id=context.project_id).\
1333 ).options(joinedload_all('rules')1339 options(joinedload_all('rules')).\
1334 ).first()1340 first()
1335 if not result:1341 if not result:
1336 raise exception.NotFound("No secuity group with id %s" %1342 raise exception.NotFound("No secuity group with id %s" %
1337 security_group_id)1343 security_group_id)
@@ -1341,13 +1347,13 @@
1341@require_context1347@require_context
1342def security_group_get_by_name(context, project_id, group_name):1348def security_group_get_by_name(context, project_id, group_name):
1343 session = get_session()1349 session = get_session()
1344 result = session.query(models.SecurityGroup1350 result = session.query(models.SecurityGroup).\
1345 ).filter_by(project_id=project_id1351 filter_by(project_id=project_id).\
1346 ).filter_by(name=group_name1352 filter_by(name=group_name).\
1347 ).filter_by(deleted=False1353 filter_by(deleted=False).\
1348 ).options(joinedload_all('rules')1354 options(joinedload_all('rules')).\
1349 ).options(joinedload_all('instances')1355 options(joinedload_all('instances')).\
1350 ).first()1356 first()
1351 if not result:1357 if not result:
1352 raise exception.NotFound(1358 raise exception.NotFound(
1353 'No security group named %s for project: %s' \1359 'No security group named %s for project: %s' \
@@ -1358,23 +1364,23 @@
1358@require_context1364@require_context
1359def security_group_get_by_project(context, project_id):1365def security_group_get_by_project(context, project_id):
1360 session = get_session()1366 session = get_session()
1361 return session.query(models.SecurityGroup1367 return session.query(models.SecurityGroup).\
1362 ).filter_by(project_id=project_id1368 filter_by(project_id=project_id).\
1363 ).filter_by(deleted=False1369 filter_by(deleted=False).\
1364 ).options(joinedload_all('rules')1370 options(joinedload_all('rules')).\
1365 ).all()1371 all()
13661372
13671373
1368@require_context1374@require_context
1369def security_group_get_by_instance(context, instance_id):1375def security_group_get_by_instance(context, instance_id):
1370 session = get_session()1376 session = get_session()
1371 return session.query(models.SecurityGroup1377 return session.query(models.SecurityGroup).\
1372 ).filter_by(deleted=False1378 filter_by(deleted=False).\
1373 ).options(joinedload_all('rules')1379 options(joinedload_all('rules')).\
1374 ).join(models.SecurityGroup.instances1380 join(models.SecurityGroup.instances).\
1375 ).filter_by(id=instance_id1381 filter_by(id=instance_id).\
1376 ).filter_by(deleted=False1382 filter_by(deleted=False).\
1377 ).all()1383 all()
13781384
13791385
1380@require_context1386@require_context
@@ -1409,6 +1415,7 @@
1409 'where group_id=:id',1415 'where group_id=:id',
1410 {'id': security_group_id})1416 {'id': security_group_id})
14111417
1418
1412@require_context1419@require_context
1413def security_group_destroy_all(context, session=None):1420def security_group_destroy_all(context, session=None):
1414 if not session:1421 if not session:
@@ -1427,16 +1434,16 @@
1427 if not session:1434 if not session:
1428 session = get_session()1435 session = get_session()
1429 if is_admin_context(context):1436 if is_admin_context(context):
1430 result = session.query(models.SecurityGroupIngressRule1437 result = session.query(models.SecurityGroupIngressRule).\
1431 ).filter_by(deleted=can_read_deleted(context)1438 filter_by(deleted=can_read_deleted(context)).\
1432 ).filter_by(id=security_group_rule_id1439 filter_by(id=security_group_rule_id).\
1433 ).first()1440 first()
1434 else:1441 else:
1435 # TODO(vish): Join to group and check for project_id1442 # TODO(vish): Join to group and check for project_id
1436 result = session.query(models.SecurityGroupIngressRule1443 result = session.query(models.SecurityGroupIngressRule).\
1437 ).filter_by(deleted=False1444 filter_by(deleted=False).\
1438 ).filter_by(id=security_group_rule_id1445 filter_by(id=security_group_rule_id).\
1439 ).first()1446 first()
1440 if not result:1447 if not result:
1441 raise exception.NotFound("No secuity group rule with id %s" %1448 raise exception.NotFound("No secuity group rule with id %s" %
1442 security_group_rule_id)1449 security_group_rule_id)
@@ -1451,6 +1458,7 @@
1451 security_group_rule_ref.save()1458 security_group_rule_ref.save()
1452 return security_group_rule_ref1459 return security_group_rule_ref
14531460
1461
1454@require_context1462@require_context
1455def security_group_rule_destroy(context, security_group_rule_id):1463def security_group_rule_destroy(context, security_group_rule_id):
1456 session = get_session()1464 session = get_session()
@@ -1468,10 +1476,10 @@
1468 if not session:1476 if not session:
1469 session = get_session()1477 session = get_session()
14701478
1471 result = session.query(models.User1479 result = session.query(models.User).\
1472 ).filter_by(id=id1480 filter_by(id=id).\
1473 ).filter_by(deleted=can_read_deleted(context)1481 filter_by(deleted=can_read_deleted(context)).\
1474 ).first()1482 first()
14751483
1476 if not result:1484 if not result:
1477 raise exception.NotFound('No user for id %s' % id)1485 raise exception.NotFound('No user for id %s' % id)
@@ -1484,10 +1492,10 @@
1484 if not session:1492 if not session:
1485 session = get_session()1493 session = get_session()
14861494
1487 result = session.query(models.User1495 result = session.query(models.User).\
1488 ).filter_by(access_key=access_key1496 filter_by(access_key=access_key).\
1489 ).filter_by(deleted=can_read_deleted(context)1497 filter_by(deleted=can_read_deleted(context)).\
1490 ).first()1498 first()
14911499
1492 if not result:1500 if not result:
1493 raise exception.NotFound('No user for access key %s' % access_key)1501 raise exception.NotFound('No user for access key %s' % access_key)
@@ -1508,21 +1516,21 @@
1508def user_delete(context, id):1516def user_delete(context, id):
1509 session = get_session()1517 session = get_session()
1510 with session.begin():1518 with session.begin():
1511 session.execute('delete from user_project_association where user_id=:id',1519 session.execute('delete from user_project_association '
1512 {'id': id})1520 'where user_id=:id', {'id': id})
1513 session.execute('delete from user_role_association where user_id=:id',1521 session.execute('delete from user_role_association '
1514 {'id': id})1522 'where user_id=:id', {'id': id})
1515 session.execute('delete from user_project_role_association where user_id=:id',1523 session.execute('delete from user_project_role_association '
1516 {'id': id})1524 'where user_id=:id', {'id': id})
1517 user_ref = user_get(context, id, session=session)1525 user_ref = user_get(context, id, session=session)
1518 session.delete(user_ref)1526 session.delete(user_ref)
15191527
15201528
1521def user_get_all(context):1529def user_get_all(context):
1522 session = get_session()1530 session = get_session()
1523 return session.query(models.User1531 return session.query(models.User).\
1524 ).filter_by(deleted=can_read_deleted(context)1532 filter_by(deleted=can_read_deleted(context)).\
1525 ).all()1533 all()
15261534
15271535
1528def project_create(_context, values):1536def project_create(_context, values):
@@ -1547,11 +1555,11 @@
1547 if not session:1555 if not session:
1548 session = get_session()1556 session = get_session()
15491557
1550 result = session.query(models.Project1558 result = session.query(models.Project).\
1551 ).filter_by(deleted=False1559 filter_by(deleted=False).\
1552 ).filter_by(id=id1560 filter_by(id=id).\
1553 ).options(joinedload_all('members')1561 options(joinedload_all('members')).\
1554 ).first()1562 first()
15551563
1556 if not result:1564 if not result:
1557 raise exception.NotFound("No project with id %s" % id)1565 raise exception.NotFound("No project with id %s" % id)
@@ -1561,18 +1569,18 @@
15611569
1562def project_get_all(context):1570def project_get_all(context):
1563 session = get_session()1571 session = get_session()
1564 return session.query(models.Project1572 return session.query(models.Project).\
1565 ).filter_by(deleted=can_read_deleted(context)1573 filter_by(deleted=can_read_deleted(context)).\
1566 ).options(joinedload_all('members')1574 options(joinedload_all('members')).\
1567 ).all()1575 all()
15681576
15691577
1570def project_get_by_user(context, user_id):1578def project_get_by_user(context, user_id):
1571 session = get_session()1579 session = get_session()
1572 user = session.query(models.User1580 user = session.query(models.User).\
1573 ).filter_by(deleted=can_read_deleted(context)1581 filter_by(deleted=can_read_deleted(context)).\
1574 ).options(joinedload_all('projects')1582 options(joinedload_all('projects')).\
1575 ).first()1583 first()
1576 return user.projects1584 return user.projects
15771585
15781586
@@ -1607,10 +1615,10 @@
1607def project_delete(context, id):1615def project_delete(context, id):
1608 session = get_session()1616 session = get_session()
1609 with session.begin():1617 with session.begin():
1610 session.execute('delete from user_project_association where project_id=:id',1618 session.execute('delete from user_project_association '
1611 {'id': id})1619 'where project_id=:id', {'id': id})
1612 session.execute('delete from user_project_role_association where project_id=:id',1620 session.execute('delete from user_project_role_association '
1613 {'id': id})1621 'where project_id=:id', {'id': id})
1614 project_ref = project_get(context, id, session=session)1622 project_ref = project_get(context, id, session=session)
1615 session.delete(project_ref)1623 session.delete(project_ref)
16161624
@@ -1625,29 +1633,30 @@
1625def user_get_roles_for_project(context, user_id, project_id):1633def user_get_roles_for_project(context, user_id, project_id):
1626 session = get_session()1634 session = get_session()
1627 with session.begin():1635 with session.begin():
1628 res = session.query(models.UserProjectRoleAssociation1636 res = session.query(models.UserProjectRoleAssociation).\
1629 ).filter_by(user_id=user_id1637 filter_by(user_id=user_id).\
1630 ).filter_by(project_id=project_id1638 filter_by(project_id=project_id).\
1631 ).all()1639 all()
1632 return [association.role for association in res]1640 return [association.role for association in res]
16331641
1642
1634def user_remove_project_role(context, user_id, project_id, role):1643def user_remove_project_role(context, user_id, project_id, role):
1635 session = get_session()1644 session = get_session()
1636 with session.begin():1645 with session.begin():
1637 session.execute('delete from user_project_role_association where ' + \1646 session.execute('delete from user_project_role_association where '
1638 'user_id=:user_id and project_id=:project_id and ' + \1647 'user_id=:user_id and project_id=:project_id and '
1639 'role=:role', { 'user_id' : user_id,1648 'role=:role', {'user_id': user_id,
1640 'project_id' : project_id,1649 'project_id': project_id,
1641 'role' : role })1650 'role': role})
16421651
16431652
1644def user_remove_role(context, user_id, role):1653def user_remove_role(context, user_id, role):
1645 session = get_session()1654 session = get_session()
1646 with session.begin():1655 with session.begin():
1647 res = session.query(models.UserRoleAssociation1656 res = session.query(models.UserRoleAssociation).\
1648 ).filter_by(user_id=user_id1657 filter_by(user_id=user_id).\
1649 ).filter_by(role=role1658 filter_by(role=role).\
1650 ).all()1659 all()
1651 for role in res:1660 for role in res:
1652 session.delete(role)1661 session.delete(role)
16531662
@@ -1656,7 +1665,8 @@
1656 session = get_session()1665 session = get_session()
1657 with session.begin():1666 with session.begin():
1658 user_ref = user_get(context, user_id, session=session)1667 user_ref = user_get(context, user_id, session=session)
1659 models.UserRoleAssociation(user=user_ref, role=role).save(session=session)1668 models.UserRoleAssociation(user=user_ref, role=role).\
1669 save(session=session)
16601670
16611671
1662def user_add_project_role(context, user_id, project_id, role):1672def user_add_project_role(context, user_id, project_id, role):
@@ -1672,12 +1682,11 @@
1672###################1682###################
16731683
16741684
1675
1676@require_admin_context1685@require_admin_context
1677def host_get_networks(context, host):1686def host_get_networks(context, host):
1678 session = get_session()1687 session = get_session()
1679 with session.begin():1688 with session.begin():
1680 return session.query(models.Network1689 return session.query(models.Network).\
1681 ).filter_by(deleted=False1690 filter_by(deleted=False).\
1682 ).filter_by(host=host1691 filter_by(host=host).\
1683 ).all()1692 all()
16841693
=== modified file 'nova/db/sqlalchemy/models.py'
--- nova/db/sqlalchemy/models.py 2010-10-14 06:17:40 +0000
+++ nova/db/sqlalchemy/models.py 2010-10-21 23:19:44 +0000
@@ -134,8 +134,8 @@
134# """Represents a host where services are running"""134# """Represents a host where services are running"""
135# __tablename__ = 'hosts'135# __tablename__ = 'hosts'
136# id = Column(String(255), primary_key=True)136# id = Column(String(255), primary_key=True)
137#137
138#138
139class Service(BASE, NovaBase):139class Service(BASE, NovaBase):
140 """Represents a running service on a host"""140 """Represents a running service on a host"""
141 __tablename__ = 'services'141 __tablename__ = 'services'
@@ -277,7 +277,8 @@
277class ExportDevice(BASE, NovaBase):277class ExportDevice(BASE, NovaBase):
278 """Represates a shelf and blade that a volume can be exported on"""278 """Represates a shelf and blade that a volume can be exported on"""
279 __tablename__ = 'export_devices'279 __tablename__ = 'export_devices'
280 __table_args__ = (schema.UniqueConstraint("shelf_id", "blade_id"), {'mysql_engine': 'InnoDB'})280 __table_args__ = (schema.UniqueConstraint("shelf_id", "blade_id"),
281 {'mysql_engine': 'InnoDB'})
281 id = Column(Integer, primary_key=True)282 id = Column(Integer, primary_key=True)
282 shelf_id = Column(Integer)283 shelf_id = Column(Integer)
283 blade_id = Column(Integer)284 blade_id = Column(Integer)
@@ -308,10 +309,13 @@
308309
309 instances = relationship(Instance,310 instances = relationship(Instance,
310 secondary="security_group_instance_association",311 secondary="security_group_instance_association",
311 primaryjoin="and_(SecurityGroup.id == SecurityGroupInstanceAssociation.security_group_id,"312 primaryjoin='and_('
312 "SecurityGroup.deleted == False)",313 'SecurityGroup.id == '
313 secondaryjoin="and_(SecurityGroupInstanceAssociation.instance_id == Instance.id,"314 'SecurityGroupInstanceAssociation.security_group_id,'
314 "Instance.deleted == False)",315 'SecurityGroup.deleted == False)',
316 secondaryjoin='and_('
317 'SecurityGroupInstanceAssociation.instance_id == Instance.id,'
318 'Instance.deleted == False)',
315 backref='security_groups')319 backref='security_groups')
316320
317 @property321 @property
@@ -330,11 +334,12 @@
330334
331 parent_group_id = Column(Integer, ForeignKey('security_groups.id'))335 parent_group_id = Column(Integer, ForeignKey('security_groups.id'))
332 parent_group = relationship("SecurityGroup", backref="rules",336 parent_group = relationship("SecurityGroup", backref="rules",
333 foreign_keys=parent_group_id,337 foreign_keys=parent_group_id,
334 primaryjoin="and_(SecurityGroupIngressRule.parent_group_id == SecurityGroup.id,"338 primaryjoin='and_('
335 "SecurityGroupIngressRule.deleted == False)")339 'SecurityGroupIngressRule.parent_group_id == SecurityGroup.id,'
340 'SecurityGroupIngressRule.deleted == False)')
336341
337 protocol = Column(String(5)) # "tcp", "udp", or "icmp"342 protocol = Column(String(5)) # "tcp", "udp", or "icmp"
338 from_port = Column(Integer)343 from_port = Column(Integer)
339 to_port = Column(Integer)344 to_port = Column(Integer)
340 cidr = Column(String(255))345 cidr = Column(String(255))
@@ -414,8 +419,9 @@
414 instance = relationship(Instance,419 instance = relationship(Instance,
415 backref=backref('fixed_ip', uselist=False),420 backref=backref('fixed_ip', uselist=False),
416 foreign_keys=instance_id,421 foreign_keys=instance_id,
417 primaryjoin='and_(FixedIp.instance_id==Instance.id,'422 primaryjoin='and_('
418 'FixedIp.deleted==False)')423 'FixedIp.instance_id == Instance.id,'
424 'FixedIp.deleted == False)')
419 allocated = Column(Boolean, default=False)425 allocated = Column(Boolean, default=False)
420 leased = Column(Boolean, default=False)426 leased = Column(Boolean, default=False)
421 reserved = Column(Boolean, default=False)427 reserved = Column(Boolean, default=False)
@@ -455,13 +461,13 @@
455 __tablename__ = 'user_project_role_association'461 __tablename__ = 'user_project_role_association'
456 user_id = Column(String(255), primary_key=True)462 user_id = Column(String(255), primary_key=True)
457 user = relationship(User,463 user = relationship(User,
458 primaryjoin=user_id==User.id,464 primaryjoin=user_id == User.id,
459 foreign_keys=[User.id],465 foreign_keys=[User.id],
460 uselist=False)466 uselist=False)
461467
462 project_id = Column(String(255), primary_key=True)468 project_id = Column(String(255), primary_key=True)
463 project = relationship(Project,469 project = relationship(Project,
464 primaryjoin=project_id==Project.id,470 primaryjoin=project_id == Project.id,
465 foreign_keys=[Project.id],471 foreign_keys=[Project.id],
466 uselist=False)472 uselist=False)
467473
@@ -485,7 +491,6 @@
485 project_id = Column(String(255), ForeignKey(Project.id), primary_key=True)491 project_id = Column(String(255), ForeignKey(Project.id), primary_key=True)
486492
487493
488
489class FloatingIp(BASE, NovaBase):494class FloatingIp(BASE, NovaBase):
490 """Represents a floating ip that dynamically forwards to a fixed ip"""495 """Represents a floating ip that dynamically forwards to a fixed ip"""
491 __tablename__ = 'floating_ips'496 __tablename__ = 'floating_ips'
@@ -495,8 +500,9 @@
495 fixed_ip = relationship(FixedIp,500 fixed_ip = relationship(FixedIp,
496 backref=backref('floating_ips'),501 backref=backref('floating_ips'),
497 foreign_keys=fixed_ip_id,502 foreign_keys=fixed_ip_id,
498 primaryjoin='and_(FloatingIp.fixed_ip_id==FixedIp.id,'503 primaryjoin='and_('
499 'FloatingIp.deleted==False)')504 'FloatingIp.fixed_ip_id == FixedIp.id,'
505 'FloatingIp.deleted == False)')
500 project_id = Column(String(255))506 project_id = Column(String(255))
501 host = Column(String(255)) # , ForeignKey('hosts.id'))507 host = Column(String(255)) # , ForeignKey('hosts.id'))
502508
@@ -507,7 +513,7 @@
507 models = (Service, Instance, Volume, ExportDevice, FixedIp,513 models = (Service, Instance, Volume, ExportDevice, FixedIp,
508 FloatingIp, Network, SecurityGroup,514 FloatingIp, Network, SecurityGroup,
509 SecurityGroupIngressRule, SecurityGroupInstanceAssociation,515 SecurityGroupIngressRule, SecurityGroupInstanceAssociation,
510 AuthToken, User, Project) # , Image, Host516 AuthToken, User, Project) # , Image, Host
511 engine = create_engine(FLAGS.sql_connection, echo=False)517 engine = create_engine(FLAGS.sql_connection, echo=False)
512 for model in models:518 for model in models:
513 model.metadata.create_all(engine)519 model.metadata.create_all(engine)
514520
=== modified file 'nova/db/sqlalchemy/session.py'
--- nova/db/sqlalchemy/session.py 2010-09-15 12:04:07 +0000
+++ nova/db/sqlalchemy/session.py 2010-10-21 23:19:44 +0000
@@ -29,6 +29,7 @@
29_ENGINE = None29_ENGINE = None
30_MAKER = None30_MAKER = None
3131
32
32def get_session(autocommit=True, expire_on_commit=False):33def get_session(autocommit=True, expire_on_commit=False):
33 """Helper method to grab session"""34 """Helper method to grab session"""
34 global _ENGINE35 global _ENGINE
@@ -39,5 +40,5 @@
39 _MAKER = (sessionmaker(bind=_ENGINE,40 _MAKER = (sessionmaker(bind=_ENGINE,
40 autocommit=autocommit,41 autocommit=autocommit,
41 expire_on_commit=expire_on_commit))42 expire_on_commit=expire_on_commit))
42 session = _MAKER()43 session = _MAKER()
43 return session44 return session