def test_create_buildings(create_smell_source, get_db):
    db = MagicMock()
    db.buildings.find_one = MagicMock(return_value=None)
    db.buildings.insert = MagicMock(return_value=None)
    get_db.return_value = db

    content_type = "SomeContent"
    nbuildings = 35
    keys = ["key-{}".format(i) for i in xrange(nbuildings)]
    heads = [dict(key=key) for key in keys]
    payloads = [
        {
            "field1": "value 1.1",
            "field2": "value 1.2",
            "field3": "value 1.3",
        },
    ]* nbuildings
    bodies = [dict(summary_payload=p, result_payload=p, raw_payload=p) for p in payloads]
    flr = "g-b(1,2)-l1"
    got = create_buildings(flr, content_type, heads, bodies)
    assert len(got) == nbuildings
    assert db.buildings.insert.call_count == 4  # 4 batch inserts
    create_smell_source.assert_has_calls([

    ])
예제 #2
0
def _create_bldg(target_flr, today, data_pipe):
    payload = {
        "date": today,
        "data_pipes": [data_pipe["type"]]
    }
    address = create_buildings(content_type=DAILY_FEED, keys=[today],
                               payloads=[payload], flr=target_flr,
                               position_hints={"next_free": True})
    if type(address) == list:
        address = address[0]
    return address
예제 #3
0
def _create_bldg(target_flr, today, data_pipe):
    payload = {
        "date": today,
        "data_pipes": [data_pipe["type"]]
    }
    address = create_buildings(flr=target_flr, content_type=DAILY_FEED, heads=[dict(key=today)],
                               bodies=[dict(summary_payload=payload, raw_payload=payload,
                                            result_payload=payload)],
                               position_hints={"next_free": True},
                               is_composite=True)
    if type(address) == list:
        address = address[0]
    return address
예제 #4
0
def create_result_bldgs(curr_bldg, action_results):
    output_bldgs = []
    if action_results is None:
        logging.warn("No results for {}".format(curr_bldg["address"]))
        return
    for r in action_results:
        key = r.get("key")
        picture = r.get("picture")
        content_type = r.get("contentType")
        summary_payload = r.get("summary")
        raw_payload = r.get("raw")
        result_payload = r.get("payload")
        placement_hints = r.get("placement_hints")

        if placement_hints.get("new_bldg"):
            flr = curr_bldg["flr"]  # same_flr is the default
            if placement_hints.get("flr_above"):
                flr_level = get_flr_level(curr_bldg["flr"])
                flr = replace_flr_level(curr_bldg["flr"], flr_level + 1)
            # same_location is the default
            position_hints = {
                "at_x": curr_bldg["x"],
                "at_y": curr_bldg["y"],
            }
            # FIXME: this was getting stuck in the queue. Must be done async.
            # create_buildings.s(content_type, [key], [payload], flr, position_hints).apply_async(
            #     queue='bldg_creation', routing_key='bldg.create'
            # )
            output_bldgs.extend(create_buildings(flr, content_type,
                                                 [dict(key=key, picture=picture)],
                                                 [dict(summary_payload=summary_payload,
                                                       raw_payload=raw_payload,
                                                       result_payload=result_payload)],
                                                 position_hints))
        else:
            # just update the current bldg
            update_bldg_with_results(curr_bldg, content_type, summary_payload,
                                     raw_payload, result_payload)
            output_bldgs.append(curr_bldg["address"])
    if output_bldgs:
        return output_bldgs
    return None
def test_create_buildings(get_db):
    db = MagicMock()
    db.buildings.find_one = MagicMock(return_value=None)
    db.buildings.insert = MagicMock(return_value=None)
    get_db.return_value = db

    content_type = "SomeContent"
    nbuildings = 35
    keys = ["key-{}".format(i) for i in xrange(nbuildings)]
    payloads = [
        {
            "field1": "value 1.1",
            "field2": "value 1.2",
            "field3": "value 1.3",
        },
    ]* nbuildings
    flr = "g-b(1,2)-l1"
    got = create_buildings(content_type, keys, payloads, flr)
    assert len(got) == nbuildings
    assert db.buildings.insert.call_count == 4  # 4 batch inserts