예제 #1
0
def edit_ad(ad_id):
    """
    Updates specific ad with user edited information.
    :param ad_id: id of the ad
    :return: either current ad info (on GET) or updated ad (on POST)
    """
    selected_ad = database.get_ad_by_id(int(ad_id))
    if not user_is_authorized_to_update_item(selected_ad.user_id):
        flash("You are not authorized to update this page")
        return redirect(url_for("index"))

    edit_ad_form = FlaskForm()
    if request.method == "POST" and edit_ad_form.validate_on_submit():
        # using FlaskForm only for csrf protection in this case, rest is custom-built
        update_ad_from_form_info(selected_ad, request.form)
        flash("Ad was updated")

    categories_with_sub_categories = database.get_categories_with_subcategories(
    )

    cities = database.get_cities()
    categories_json = json.dumps(categories_with_sub_categories)
    ad_dict = database.ad_to_dict(selected_ad)
    selected_sub_categories = categories_with_sub_categories[
        ad_dict["category"]]["value"]
    return render_template("edit_my_ad.html",
                           ad=ad_dict,
                           categories_json=categories_json,
                           categories=categories_with_sub_categories,
                           selected_sub_categories=selected_sub_categories,
                           cities=cities,
                           edit_ad_form=edit_ad_form,
                           page_info=get_page_info())
예제 #2
0
def new_ad():
    """
    Creates new ad from user inputs
    :return: on get add page; on post add  and redirects to my ads page ; on get  returns partly filled in template
    """

    # using FlaskForm for csrf protection, rest is custom - built
    new_ad_form = FlaskForm()
    if request.method == "POST" and new_ad_form.validate_on_submit():
        ad_new = create_database.Ad(user_id=flask_login.current_user.id)
        update_ad_from_form_info(ad_new, request.form)
        database.update_ad(ad_new)
        flash("New ad was successfully added")
        return redirect(url_for("my_ads"))

    user = database.get_user_by_unicode_id(flask_login.current_user.id)
    new_ad_template = database.get_ad_template(
        user, initialize_city=True, initialize_category_and_subcategory=True)
    categories_with_sub_categories = database.get_categories_with_subcategories(
    )
    cities = database.get_cities()
    categories_json = json.dumps(categories_with_sub_categories)

    selected_sub_categories = categories_with_sub_categories[
        new_ad_template["category"]]["value"]

    return render_template("new_ad.html",
                           ad=new_ad_template,
                           categories_json=categories_json,
                           categories=categories_with_sub_categories,
                           new_ad_form=new_ad_form,
                           selected_sub_categories=selected_sub_categories,
                           cities=cities,
                           page_info=get_page_info())
예제 #3
0
def generate_config(empty=False):
    """ Generate a config file for adding static values by hand. """

    if empty:
        return generate_empty_config()

    session = DatabaseSession()

    sectors = session.query(Sector).all()

    print(sectors)
    sectors_data = []

    for sector in sectors:
        city_data = []
        sector_data = {"name": sector.name, "cities": city_data}

        cities = get_cities(session, sector)
        print(cities)
        for city in cities:
            city_data.append({"name": city.name, "location": city.location.position})

        sectors_data.append(sector_data)

    ship_chassis_data = []
    for chassis in session.query(ShipChassis).all():
        data = chassis.json
        data.pop(TYPE_META)
        data.pop("id")
        ship_chassis_data.append(data)

    print(ship_chassis_data)

    ship_system_data = []
    ship_systems = session.query(ShipSystem).all()
    for ship_system in ship_systems:
        attributes = {}
        data = {"name": ship_system.name, "attributes": attributes}
        for attribute in ship_system.attributes:
            attributes[attribute.type.value] = attribute.value

        ship_system_data.append(data)

    resource_data = []
    for resource_type in session.query(ResourceType).all():
        data = {"name": resource_type.name, "base_cost": resource_type.base_cost}
        resource_data.append(data)

    print(
        yaml.dump(
            {
                "Sector": sectors_data,
                "ShipChassis": ship_chassis_data,
                "ShipSystem": ship_system_data,
                "Resources": resource_data,
            },
            sort_keys=False,
        )
    )
예제 #4
0
def get_list_of_cities():
    """
    Returns JSON for list of cities with ids
    :return: JSON for all cities
    """
    cities = database.get_cities()
    list_of_city_dictionaries = [
        database.city_to_dict(city) for city in cities
    ]
    return jsonify(list_of_city_dictionaries)
예제 #5
0
def index():
    """
    :return: main page of the application
    """
    print_current_session()
    categories_with_sub_categories = database.get_categories_with_subcategories(
    )
    categories_json = json.dumps(categories_with_sub_categories)
    cities = database.get_cities()
    return render_template("index.html",
                           categories=categories_with_sub_categories,
                           categories_json=categories_json,
                           cities=cities,
                           page_info=get_page_info())
예제 #6
0
def send_cities(message):  # pylint: disable=unused-argument
    """ Trigger a 'load_city' event for each city in the game. """
    LOGGER.debug(f"City list requested by {current_user}")
    for city in get_cities(database_session,
                           current_user.ship.location.sector):
        resources = {}
        for resource_held in city.resources:
            resources[resource_held.resource.name] = resource_held.amount

        response = {
            "position": city.location.coordinate,
            "id": city.id,
            "name": city.name,
            "resources": resources,
            "population": city.population,
        }
        LOGGER.debug(f"Emitting {response} to {current_user}")
        emit("load_city", response)
예제 #7
0
 def get():
     data = get_cities()
     cities = []
     for record in data:
         cities.append({'id': record.city_id, 'name': record.city_name})
     return cities