Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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'))
Ejemplo n.º 3
0
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))
Ejemplo n.º 4
0
def index(request):
    session = DBSession()
    sc_dict = {'scenarios': session.query(Scenario).all()}
    return sc_dict 
Ejemplo n.º 5
0
def show_all(request):
    session = DBSession()
    scs = session.query(Scenario).all()
    return json_response({'type': 'FeatureCollection',
                          'features': [sc.to_geojson() for sc in scs]})