Exemple #1
0
def edit_campaign(uuid):
    import datetime
    from flask import url_for, redirect
    from campaign_manager.forms.campaign import CampaignForm
    from campaign_manager.models.campaign import Campaign
    """Get campaign details.
    """
    try:
        campaign = Campaign.get(uuid)
        context = campaign.to_dict()

        if request.method == 'GET':
            form = CampaignForm()
            form.name.data = campaign.name
            form.campaign_managers.data = campaign.campaign_managers
            form.remote_projects.data = campaign.remote_projects
            form.types.data = campaign.types
            form.description.data = campaign.description
            form.geometry.data = json.dumps(campaign.geometry)
            form.map_type.data = campaign.map_type
            form.selected_functions.data = json.dumps(
                campaign.selected_functions)
            form.start_date.data = datetime.datetime.strptime(
                campaign.start_date, '%Y-%m-%d')
            if campaign.end_date:
                form.end_date.data = datetime.datetime.strptime(
                    campaign.end_date, '%Y-%m-%d')
        else:
            form = CampaignForm(request.form)
            if form.validate_on_submit():
                data = form.data
                data.pop('types_options')
                data.pop('csrf_token')
                data.pop('submit')
                campaign.update_data(data, form.uploader.data)
                Campaign.compute(campaign.uuid)

                return redirect(
                    url_for('campaign_manager.get_campaign',
                            uuid=campaign.uuid))
    except Campaign.DoesNotExist:
        return Response('Campaign not found')
    context['oauth_consumer_key'] = OAUTH_CONSUMER_KEY
    context['oauth_secret'] = OAUTH_SECRET
    context['map_provider'] = map_provider()
    context['url'] = '/edit/%s' % uuid
    context['action'] = 'edit'
    context['functions'] = get_selected_functions()
    context['title'] = 'Edit Campaign'
    context['maximum_area_size'] = MAX_AREA_SIZE
    context['uuid'] = uuid
    context['types'] = {}
    context['campaign_creator'] = campaign.campaign_creator
    context['link_to_omk'] = campaign.link_to_omk
    try:
        context['types'] = json.dumps(get_types()).replace(
            'True', 'true').replace('False', 'false')
    except ValueError:
        pass
    return render_template('create_campaign.html', form=form, **context)
Exemple #2
0
def get_campaign_data(uuid):
    from campaign_manager.models.campaign import Campaign
    from campaign_manager.aws import S3Data
    """Get campaign details.
    """
    try:
        campaign = Campaign.get(uuid)
    except:
        abort(404)

    context = campaign.to_dict()
    context['s3_campaign_url'] = S3Data().url(uuid)
    campaign_manager_names = []
    for manager in parse_json_string(campaign.campaign_managers):
        campaign_manager_names.append(manager['name'])

    campaign_viewer_names = []
    for viewer in parse_json_string(campaign.campaign_viewers):
        campaign_viewer_names.append(viewer['name'])

    campaign_contributor_names = []
    for contributor in parse_json_string(campaign.campaign_contributors):
        campaign_contributor_names.append(contributor['name'])

    context['oauth_consumer_key'] = OAUTH_CONSUMER_KEY
    context['oauth_secret'] = OAUTH_SECRET
    context['map_provider'] = map_provider()
    context['campaign_manager_names'] = campaign_manager_names
    context['campaign_viewer_names'] = campaign_viewer_names
    context['campaign_contributor_names'] = campaign_contributor_names
    context['participants'] = len(campaign.campaign_managers)

    context['pct_covered_areas'] = campaign.calculate_areas_covered()

    if campaign.map_type != '':
        context['attribution'] = find_attribution(campaign.map_type)

    # Start date
    try:
        start_date = datetime.strptime(campaign.start_date, '%Y-%m-%d')
        context['start_date_date'] = start_date.strftime('%d %b')
        context['start_date_year'] = start_date.strftime('%Y')
    except TypeError:
        context['start_date_date'] = '-'
        context['start_date_year'] = '-'
    context['current_status'] = campaign.get_current_status()
    if context['current_status'] == 'active':
        context['current_status'] = 'running'

    # End date
    try:
        end_date = datetime.strptime(campaign.end_date, '%Y-%m-%d')
        context['end_date_date'] = end_date.strftime('%d %b')
        context['end_date_year'] = end_date.strftime('%Y')
    except TypeError:
        context['end_date_date'] = '-'
        context['end_date_year'] = '-'
    return context
def get_campaign_insight_function_data_metadata(uuid, insight_function_id):
    from campaign_manager.models.campaign import Campaign
    """Get campaign details.
    """
    try:
        campaign = Campaign.get(uuid)
        data = campaign.insights_function_data_metadata(insight_function_id)
        return Response(json.dumps(data))
    except Campaign.DoesNotExist:
        return Response('Campaign not found')
def get_campaign_insight_function_data(uuid, insight_function_id):
    from campaign_manager.models.campaign import Campaign
    """Get campaign details.
    """
    try:
        campaign = Campaign.get(uuid)
        rendered_html = campaign.render_insights_function(insight_function_id)
        return Response(rendered_html)
    except Campaign.DoesNotExist:
        return Response('Campaign not found')
Exemple #5
0
def download_josm(uuid, file_name):
    """Download josm file."""
    campaign = Campaign.get(uuid)
    campaign_name = campaign.name + '.osm'
    file_path = os.path.join(config.CACHE_DIR, file_name)
    if not os.path.exists(file_path):
        abort(404)
    return send_file(file_path,
                     as_attachment=True,
                     attachment_filename=campaign_name)
Exemple #6
0
def get_osmcha_errors_function(uuid):
    try:
        campaign = Campaign.get(uuid)
        rendered_html = campaign.render_insights_function(
            insight_function_id='total-osmcha-errors',
            insight_function_name='OsmchaChangesets',
            additional_data=clean_argument(request.args))
        return Response(rendered_html)
    except Campaign.DoesNotExist:
        abort(404)
Exemple #7
0
def delete_campaign(uuid):
    try:
        campaign = Campaign.get(uuid)
        context = campaign.to_dict()
        # Get function from the model to delete S3 folders for the project
        campaign.delete()
        # Show a message to confirm the project is deleted
        flash('You successfully deleted a project!')
        # Return a status 200 to the frontend
        response = Response(status=200)
        return response
    except Campaign.DoesNotExist:
        abort(404)
def get_campaign(uuid):
    from campaign_manager.models.campaign import Campaign
    """Get campaign details.
    """
    try:
        campaign = Campaign.get(uuid)
        context = campaign.to_dict()
        context['oauth_consumer_key'] = OAUTH_CONSUMER_KEY
        context['oauth_secret'] = OAUTH_SECRET
        context['geometry'] = json.dumps(campaign.geometry)
        context['selected_functions'] = campaign.get_selected_functions_in_string()

        # Calculate remaining day
        try:
            current = datetime.now()
            end_date = datetime.strptime(campaign.end_date, '%Y-%m-%d')
            remaining = end_date - current
            context['remaining_days'] = remaining.days if remaining.days > 0 else 0
        except TypeError:
            context['remaining_days'] = '-'

        # Start date
        try:
            start_date = datetime.strptime(campaign.start_date, '%Y-%m-%d')
            context['start_date_date'] = start_date.strftime('%d %b')
            context['start_date_year'] = start_date.strftime('%Y')
        except TypeError:
            context['start_date_date'] = '-'
            context['start_date_year'] = '-'

        # End date
        try:
            start_date = datetime.strptime(campaign.end_date, '%Y-%m-%d')
            context['end_date_date'] = end_date.strftime('%d %b')
            context['end_date_year'] = end_date.strftime('%Y')
        except TypeError:
            context['end_date_date'] = '-'
            context['end_date_year'] = '-'

        # Participant
        context['participants'] = len(campaign.campaign_managers)

        return render_template(
            'campaign_detail.html', **context)
    except Campaign.DoesNotExist:
        context = dict(
            oauth_consumer_key=OAUTH_CONSUMER_KEY,
            oauth_secret=OAUTH_SECRET
        )
        return render_template(
            'campaign_not_found.html', **context)
Exemple #9
0
def campaign_coverage_upload_chunk_success(uuid):
    """Upload chunk handle success.
    """
    from campaign_manager.models.campaign import Campaign
    from campaign_manager.insights_functions.upload_coverage import (
        UploadCoverage)
    # validate coverage
    try:
        campaign = Campaign.get(uuid)
        coverage_function = UploadCoverage(campaign)
        coverage = coverage_function.get_function_raw_data()
        if not coverage:
            coverage_function.delete_coverage_files()
            return Response(
                json.dumps({
                    'success': False,
                    'reason': 'Shapefile is not valid.'
                }))
        if not check_geojson_is_polygon(coverage):
            coverage_function.delete_coverage_files()
            return Response(
                json.dumps({
                    'success': False,
                    'reason': 'It is not in polygon/multipolygon type.'
                }))

        try:
            coverage['features'][0]['properties']['date']
        except KeyError:
            coverage_function.delete_coverage_files()
            return Response(
                json.dumps({
                    'success': False,
                    'reason': 'Needs date attribute in shapefile.'
                }))

        campaign.coverage = {
            'last_uploader': request.args.get('uploader', ''),
            'last_uploaded': datetime.now().strftime('%Y-%m-%d'),
            'geojson': coverage
        }
        coverage_uploader = request.args.get('uploader', '')
        campaign.save(coverage_uploader)
        return Response(
            json.dumps({
                'success': True,
                'data': campaign.coverage,
                'files': coverage_function.get_coverage_files()
            }))
    except Campaign.DoesNotExist:
        abort(404)
Exemple #10
0
def download_kml(uuid, file_name):
    """Download campaign as a kml file"""
    campaign = Campaign.get(uuid)

    file_path = os.path.join(config.CACHE_DIR, file_name)

    campaign_file_name = campaign.name + '.kml'

    if not os.path.exists(file_path):
        abort(404)

    return send_file(file_path,
                     as_attachment=True,
                     attachment_filename=campaign_file_name)
Exemple #11
0
def get_campaign(uuid):
    from campaign_manager.models.campaign import Campaign
    from campaign_manager.aws import S3Data
    """Get campaign details.
    """

    try:
        campaign = Campaign.get(uuid)
    except:
        abort(404)

    context = campaign.to_dict()
    context['s3_campaign_url'] = S3Data().url(uuid)

    context['types'] = list(
        map(lambda type: type[1]['type'], context['types'].items()))

    context['oauth_consumer_key'] = OAUTH_CONSUMER_KEY
    context['oauth_secret'] = OAUTH_SECRET
    context['map_provider'] = map_provider()
    context['participants'] = len(campaign.campaign_managers)

    context['pct_covered_areas'] = campaign.calculate_areas_covered()

    if campaign.map_type != '':
        context['attribution'] = find_attribution(campaign.map_type)

    # Start date
    try:
        start_date = datetime.strptime(campaign.start_date, '%Y-%m-%d')
        context['start_date_date'] = start_date.strftime('%d %b')
        context['start_date_year'] = start_date.strftime('%Y')
    except TypeError:
        context['start_date_date'] = '-'
        context['start_date_year'] = '-'
    context['current_status'] = campaign.get_current_status()
    if context['current_status'] == 'active':
        context['current_status'] = 'running'

    # End date
    try:
        end_date = datetime.strptime(campaign.end_date, '%Y-%m-%d')
        context['end_date_date'] = end_date.strftime('%d %b')
        context['end_date_year'] = end_date.strftime('%Y')
    except TypeError:
        context['end_date_date'] = '-'
        context['end_date_year'] = '-'

    return render_template('campaign_detail.html', **context)
Exemple #12
0
def edit_campaign(uuid):
    import datetime
    from flask import url_for, redirect
    from campaign_manager.forms.campaign import CampaignForm
    from campaign_manager.models.campaign import Campaign
    """Get campaign details.
    """
    try:
        campaign = Campaign.get(uuid)
        context = campaign.to_dict()
        if request.method == 'GET':
            form = CampaignForm()
            form.name.data = campaign.name
            form.campaign_status.data = campaign.campaign_status
            form.coverage.data = campaign.coverage
            form.campaign_managers.data = campaign.campaign_managers
            form.description.data = campaign.description
            form.geometry.data = json.dumps(campaign.geometry)
            form.selected_functions.data = json.dumps(campaign.selected_functions)
            form.start_date.data = datetime.datetime.strptime(
                campaign.start_date, '%Y-%m-%d')
            if campaign.end_date:
                form.end_date.data = datetime.datetime.strptime(
                    campaign.end_date, '%Y-%m-%d')
        else:
            form = CampaignForm(request.form)
            if form.validate_on_submit():
                data = form.data
                data.pop('csrf_token')
                data.pop('submit')
                campaign.update_data(data, form.uploader.data)
                return redirect(
                    url_for('campaign_manager.get_campaign',
                            uuid=campaign.uuid)
                )
    except Campaign.DoesNotExist:
        return Response('Campaign not found')
    context['oauth_consumer_key'] = OAUTH_CONSUMER_KEY
    context['oauth_secret'] = OAUTH_SECRET
    context['action'] = '/campaign_manager/edit/%s' % uuid
    context['campaigns'] = Campaign.all()
    context['categories'] = AbstractInsightsFunction.CATEGORIES
    context['functions'] = get_selected_functions()
    context['title'] = 'Edit Campaign'
    return render_template(
        'create_campaign.html', form=form, **context)
Exemple #13
0
def get_osmcha_errors_data(uuid):
    try:
        campaign = Campaign.get(uuid)
        page_size = request.args.get('page_size', None)
        page = request.args.get('page', None)
        osmcha_changeset = OsmchaChangesets(campaign=campaign)

        if page_size:
            osmcha_changeset.max_page = int(page_size)
        if page:
            osmcha_changeset.current_page = int(page)

        osmcha_changeset.run()
        data = osmcha_changeset.get_function_data()
        return jsonify(data)
    except Campaign.DoesNotExist:
        abort(404)