Exemple #1
0
def update_waymarks():  # pylint: disable=R0912

    places = places_storage.places.all()

    roads = roads_storage.all_exists_roads()

    places_len = len(places)

    paths = [[Path() for place in xrange(places_len)]
             for i in xrange(places_len)]  # pylint: disable=W0612

    p2i = dict((place.id, i) for i, place in enumerate(places))

    for i in xrange(len(places)):
        paths[i][i].update_path(0, None)

    for road in roads:
        i = p2i[road.point_1_id]
        j = p2i[road.point_2_id]
        paths[i][j].update_path(road.length, road.id)
        paths[j][i].update_path(road.length, road.id)

    for k in xrange(places_len):
        for i in xrange(places_len):
            for j in xrange(places_len):
                new_len = min(paths[i][j].length,
                              paths[i][k].length + paths[k][j].length)
                paths[i][j].update_path(new_len, paths[i][k].road_id)

    for row in paths:
        res = []
        for el in row:
            res.append(el.road_id)

    for i in xrange(places_len):
        for j in xrange(places_len):
            if paths[i][j].road_id is not None:
                road = roads_storage[paths[i][j].road_id]
            else:
                road = None

            waymark = waymarks_storage.look_for_road(point_from=places[i].id,
                                                     point_to=places[j].id)

            if waymark:
                waymark.road = road
                waymark.length = paths[i][j].length
                waymark.save()
            else:
                waymark = WaymarkPrototype.create(point_from=places[i],
                                                  point_to=places[j],
                                                  road=road,
                                                  length=paths[i][j].length)

    waymarks_storage.update_version()
Exemple #2
0
def update_waymarks(): # pylint: disable=R0912

    places = places_storage.places.all()

    roads = roads_storage.all_exists_roads()

    places_len = len(places)

    paths = [ [ Path() for place in xrange(places_len) ] for i in xrange(places_len)] # pylint: disable=W0612

    p2i = dict( (place.id, i) for i, place in enumerate(places))

    for i in xrange(len(places)):
        paths[i][i].update_path(0, None)

    for road in roads:
        i = p2i[road.point_1_id]
        j = p2i[road.point_2_id]
        paths[i][j].update_path(road.length, road.id)
        paths[j][i].update_path(road.length, road.id)

    for k in xrange(places_len):
        for i in xrange(places_len):
            for j in xrange(places_len):
                new_len = min(paths[i][j].length,
                              paths[i][k].length + paths[k][j].length)
                paths[i][j].update_path(new_len, paths[i][k].road_id)

    for row in paths:
        res = []
        for el in row:
            res.append(el.road_id)


    for i in xrange(places_len):
        for j in xrange(places_len):
            if paths[i][j].road_id is not None:
                road = roads_storage[paths[i][j].road_id]
            else:
                road = None

            waymark = waymarks_storage.look_for_road(point_from=places[i].id, point_to=places[j].id)

            if waymark:
                waymark.road = road
                waymark.length = paths[i][j].length
                waymark.save()
            else:
                waymark = WaymarkPrototype.create(point_from=places[i],
                                                  point_to=places[j],
                                                  road=road,
                                                  length=paths[i][j].length)

    waymarks_storage.update_version()
Exemple #3
0
    def create(cls, point_from, point_to, road, length):
        from the_tale.game.roads.storage import waymarks_storage

        try:
            Waymark.objects.get(point_from=point_from.id,
                                point_to=point_to.id)
            raise exceptions.WaymarkAlreadyExistsError(start=point_from.id, stop=point_to.id)
        except Waymark.DoesNotExist:
            pass

        model = Waymark.objects.create(point_from_id=point_from.id,
                                       point_to_id=point_to.id,
                                       road=road._model if road else None,
                                       length=length)

        prototype = cls(model)

        waymarks_storage.add_item(prototype.id, prototype)
        waymarks_storage.update_version()

        return prototype
Exemple #4
0
    def create(cls, point_from, point_to, road, length):
        from the_tale.game.roads.storage import waymarks_storage

        try:
            Waymark.objects.get(point_from=point_from.id, point_to=point_to.id)
            raise exceptions.WaymarkAlreadyExistsError(start=point_from.id,
                                                       stop=point_to.id)
        except Waymark.DoesNotExist:
            pass

        model = Waymark.objects.create(point_from_id=point_from.id,
                                       point_to_id=point_to.id,
                                       road=road._model if road else None,
                                       length=length)

        prototype = cls(model)

        waymarks_storage.add_item(prototype.id, prototype)
        waymarks_storage.update_version()

        return prototype