예제 #1
0
def handle_fixture_update(sender, xform, cases, **kwargs):
    if hasattr(xform, "domain") and xform.domain == TEST_DOMAIN\
            and hasattr(xform, "xmlns") and xform.xmlns in ALL_M4CHANGE_FORMS:
        db = FixtureReportResult.get_db()
        data_source = M4ChangeReportDataSource()
        date_range = get_last_month()
        location_id = get_user_by_id(xform.form['meta']['userID']).get_domain_membership(xform.domain).location_id

        results_for_last_month = FixtureReportResult.get_report_results_by_key(domain=xform.domain,
                                                                               location_id=location_id,
                                                                               start_date=date_range[0].strftime("%Y-%m-%d"),
                                                                               end_date=date_range[1].strftime("%Y-%m-%d"))
        db.delete_docs(results_for_last_month)

        data_source.configure(config={
            "startdate": date_range[0],
            "enddate": date_range[1],
            "location_id": location_id,
            "domain": xform.domain
        })
        report_data = data_source.get_data()

        for report_slug in report_data:
            rows = dict(report_data[report_slug].get("data", []))
            name = report_data[report_slug].get("name")
            FixtureReportResult.save_result(xform.domain, location_id, date_range[0].date(), date_range[1].date(), report_slug, rows, name)
예제 #2
0
def generate_fixtures_for_locations():
    client = get_redis_client()
    start_date, end_date = get_last_n_months(1)[0]
    db = FixtureReportResult.get_db()
    data_source = M4ChangeReportDataSource()

    for domain in M4CHANGE_DOMAINS:
        redis_key = REDIS_FIXTURE_KEYS[domain]
        redis_lock_key = REDIS_FIXTURE_LOCK_KEYS[domain]
        lock = client.lock(redis_lock_key, timeout=5)
        location_ids = []
        if lock.acquire(blocking=True):
            try:
                location_ids_str = client.get(redis_key)
                location_ids = json.loads(location_ids_str if location_ids_str else "[]")
                client.set(redis_key, '[]')
            finally:
                lock.release()
        for location_id in location_ids:
            results_for_last_month = FixtureReportResult.get_report_results_by_key(domain=domain,
                                                                                   location_id=location_id,
                                                                                   start_date=start_date.strftime("%Y-%m-%d"),
                                                                                   end_date=end_date.strftime("%Y-%m-%d"))
            db.delete_docs(results_for_last_month)

            data_source.configure(config={
                "startdate": start_date,
                "enddate": end_date,
                "location_id": location_id,
                "domain": domain
            })
            report_data = data_source.get_data()

            for report_slug in report_data:
                rows = dict(report_data[report_slug].get("data", []))
                name = report_data[report_slug].get("name")
                FixtureReportResult.save_result(domain, location_id, start_date.date(), end_date.date(),
                                                report_slug, rows, name)