def remove_phase(request): """ Remove a phase and all its descendents """ session = DBSession() phase = get_object_or_404(Phase, request, ('phase_id', 'id')) if phase.is_root(): raise HTTPBadRequest('Unable to remove a root phase, remove the scenario instead') # get all phases that descend from this phase phases = phase.get_descendents_query().distinct().order_by(Phase.id.desc()) """ phases = session.query(Phase).filter( (Phase.scenario_id == phase.scenario_id) & (Phase.id == PhaseAncestor.phase_id) & (PhaseAncestor.ancestor_phase_id == phase.id) & (PhaseAncestor.scenario_id == phase.scenario_id)).distinct().\ order_by(Phase.id.desc()) """ # needed for referring to parent phase upon return scenario_id = phase.scenario_id # get the phase_id of the parent if it exists parent_phase_id = session.query(func.max(PhaseAncestor.ancestor_phase_id)).filter( (PhaseAncestor.scenario_id == phase.scenario_id) & (PhaseAncestor.phase_id == phase.id) & (PhaseAncestor.ancestor_phase_id < phase.id)).one()[0] # may want to push this down into Phase object later for p in phases: session.query(Edge).filter( (Edge.scenario_id==p.scenario_id) & (Edge.phase_id==p.id)).delete() session.query(Node).filter( (Node.scenario_id==p.scenario_id) & (Node.phase_id==p.id)).delete() session.query(PhaseAncestor).filter( (PhaseAncestor.scenario_id==p.scenario_id) & (PhaseAncestor.phase_id==p.id)).delete() session.query(Phase).filter( (Phase.scenario_id==p.scenario_id) & (Phase.id==p.id)).delete() return HTTPFound(location=request.route_url( 'show-phase', id=scenario_id, phase_id=parent_phase_id))
def remove_scenario(request): session = DBSession() sc_pairs = request.params sc_dict = sc_pairs.dict_of_lists() if (sc_dict.has_key('scenarios')): for sid in sc_pairs.dict_of_lists()['scenarios']: session.query(Edge).filter(Edge.scenario_id==int(sid)).delete() session.query(Node).filter(Node.scenario_id==int(sid)).delete() session.query(PhaseAncestor).filter(PhaseAncestor.scenario_id==int(sid)).delete() session.query(Phase).filter(Phase.scenario_id==int(sid)).delete() session.query(Scenario).filter(Scenario.id==int(sid)).delete() return HTTPFound(location=request.route_url('index'))
def get_object_or_404(cls, request, id_fields=('id',)): session = DBSession() id_vals = [request.matchdict.get(id_fld, None) for id_fld in id_fields] # import pdb; pdb.set_trace() if id_vals is None: raise NameError('You have no fields that match in your request matchdict') # import pdb; pdb.set_trace() obj = session.query(cls).get(id_vals) if obj is not None: return obj else: raise HTTPNotFound('Unable to locate class:%s with ids:%s' % (cls, id_vals))
def index(request): session = DBSession() sc_dict = {'scenarios': session.query(Scenario).all()} return sc_dict
def show_all(request): session = DBSession() scs = session.query(Scenario).all() return json_response({'type': 'FeatureCollection', 'features': [sc.to_geojson() for sc in scs]})