Example #1
0
def refresh():
    """Update incremental aggregates and materialized views, then email logs
    to the development team.
    """
    buffer = io.StringIO()
    with mail.CaptureLogs(manage.logger, buffer):
        try:
            manage.update_aggregates()
            manage.refresh_materialized()
            download.clear_bucket()
        except Exception as error:
            manage.logger.exception(error)
    try:
        mail.send_mail(buffer)
    except Exception as error:
        logger.exception(error)
Example #2
0
    def test_update_aggregate_asize_existing(self):
        def get_existing():
            return models.ScheduleABySize.query.filter_by(
                size=500,
                cycle=2016,
            ).order_by(models.ScheduleABySize.committee_id, ).first()

        existing = get_existing()
        total = existing.total
        count = existing.count
        self.SchedAFactory(
            rpt_yr=2015,
            cmte_id=existing.committee_id,
            contb_receipt_amt=538,
            contb_receipt_dt=datetime.datetime(2015, 1, 1),
            receipt_tp='15J',
        )
        db.session.commit()
        manage.update_aggregates()
        db.session.execute(
            'refresh materialized view ofec_sched_a_aggregate_size_merged_mv')
        existing = get_existing()
        self.assertEqual(existing.total, total + 538)
        self.assertEqual(existing.count, count + 1)
Example #3
0
 def test_update_aggregate_purpose_create(self):
     db.session.execute('delete from disclosure.f_item_receipt_or_exp')
     filing = self.NmlSchedBFactory(rpt_yr=2015,
                                    cmte_id='C12345',
                                    disb_amt=538,
                                    disb_dt=datetime.datetime(2015, 1, 1),
                                    disb_desc='CAMPAIGN BUTTONS',
                                    form_tp_cd='11')
     self.FItemReceiptOrExp(
         sub_id=filing.sub_id,
         rpt_yr=2015,
     )
     db.session.commit()
     manage.update_aggregates()
     manage.refresh_itemized()
     rows = models.ScheduleBByPurpose.query.filter_by(
         cycle=2016,
         committee_id='C12345',
         purpose='MATERIALS',
     ).all()
     self.assertEqual(len(rows), 1)
     self.assertEqual(rows[0].total, 538)
     self.assertEqual(rows[0].count, 1)
     filing.disbursement_description = 'BUMPER STICKERS'
     db.session.add(filing)
     db.session.commit()
     manage.update_aggregates()
     manage.refresh_itemized()
     db.session.refresh(rows[0])
     self.assertEqual(rows[0].total, 538)
     self.assertEqual(rows[0].count, 1)
     filing.disb_desc = 'HANGING OUT'
     db.session.add(filing)
     db.session.commit()
     manage.update_aggregates()
     manage.refresh_itemized()
     db.session.refresh(rows[0])
     self.assertEqual(rows[0].total, 0)
     self.assertEqual(rows[0].count, 0)
Example #4
0
    def test_sched_a_queue_transactions_success(self):
        # Make sure queues are clear before starting
        self._clear_sched_a_queues()

        # Test create
        row = self.SchedAFactory(rpt_yr=2014,
                                 contbr_nm='Sheldon Adelson',
                                 contb_receipt_dt=datetime.datetime(
                                     2014, 1, 1))
        db.session.commit()
        new_queue_count = self._get_sched_a_queue_new_count()
        old_queue_count = self._get_sched_a_queue_old_count()
        self.assertEqual(new_queue_count, 1)
        self.assertEqual(old_queue_count, 0)
        manage.update_aggregates()
        manage.refresh_itemized()
        search = models.ScheduleA.query.filter(
            models.ScheduleA.sub_id == row.sub_id).one()
        new_queue_count = self._get_sched_a_queue_new_count()
        old_queue_count = self._get_sched_a_queue_old_count()
        self.assertEqual(new_queue_count, 0)
        self.assertEqual(old_queue_count, 0)
        self.assertEqual(search.sub_id, row.sub_id)

        # Test update
        row.contbr_nm = 'Shelly Adelson'
        db.session.add(row)
        db.session.commit()
        new_queue_count = self._get_sched_a_queue_new_count()
        old_queue_count = self._get_sched_a_queue_old_count()
        self.assertEqual(new_queue_count, 1)
        self.assertEqual(old_queue_count, 1)
        manage.update_aggregates()
        manage.refresh_itemized()
        search = models.ScheduleA.query.filter(
            models.ScheduleA.sub_id == row.sub_id).one()
        db.session.refresh(search)
        new_queue_count = self._get_sched_a_queue_new_count()
        old_queue_count = self._get_sched_a_queue_old_count()
        self.assertEqual(new_queue_count, 0)
        self.assertEqual(old_queue_count, 0)
        self.assertEqual(search.sub_id, row.sub_id)

        # Test delete
        db.session.delete(row)
        db.session.commit()
        new_queue_count = self._get_sched_a_queue_new_count()
        old_queue_count = self._get_sched_a_queue_old_count()
        self.assertEqual(new_queue_count, 0)
        self.assertEqual(old_queue_count, 1)
        manage.update_aggregates()
        manage.refresh_itemized()
        new_queue_count = self._get_sched_a_queue_new_count()
        old_queue_count = self._get_sched_a_queue_old_count()
        self.assertEqual(new_queue_count, 0)
        self.assertEqual(old_queue_count, 0)
        self.assertEqual(
            models.ScheduleA.query.filter(
                models.ScheduleA.sub_id == row.sub_id).count(),
            0,
        )
Example #5
0
def refresh():
    with manage.app.test_request_context():
        manage.update_aggregates()
        manage.refresh_materialized()
Example #6
0
    def _check_update_aggregate_existing(self, item_key, total_key, total_model, item_key_value):
        filing = self.NmlSchedAFactory(**{
            'rpt_yr': 2015,
            'cmte_id': 'X1234',
            'contb_receipt_amt': 504,
            'contb_receipt_dt': datetime.datetime(2015, 1, 1),
            'receipt_tp': '15J',
            item_key: item_key_value
        })
        self.FItemReceiptOrExp(
            sub_id=filing.sub_id,
            rpt_yr=2015,
        )
        db.session.commit()
        existing = total_model.query.filter(
            total_model.cycle == 2016,
            getattr(total_model, total_key) == item_key_value,  # noqa
        ).first()
        total = existing.total
        count = existing.count
        self._clear_sched_a_queues()
        filing = self.NmlSchedAFactory(**{
            'rpt_yr': 2015,
            'cmte_id': existing.committee_id,
            'contb_receipt_amt': 538,
            'contb_receipt_dt': datetime.datetime(2015, 1, 1),
            'receipt_tp': '15J',
            item_key: item_key_value
        })
        self.FItemReceiptOrExp(
            sub_id=filing.sub_id,
            rpt_yr=2015,
        )
        db.session.commit()
        db.session.refresh(existing)
        self.assertEqual(existing.total, total + 538)
        self.assertEqual(existing.count, count + 1)

    

        # Create a committee and committee report
        # Changed to point to sampled data, may be problematic in the future if det sum table
        # changes a lot and hence the tests need to test new behavior, believe it's fine for now though. -jcc
        rep = sa.Table('v_sum_and_det_sum_report', db.metadata, schema='disclosure', autoload=True, autoload_with=db.engine)
        ins = rep.insert().values(
            indv_unitem_contb=20,
            cmte_id=committee_id,
            rpt_yr=2016,
            orig_sub_id=9,
            form_tp_cd='F3',
        )
        db.session.execute(ins)
        db.session.commit()
        manage.update_aggregates()
        db.session.execute('refresh materialized view ofec_totals_combined_mv')
        db.session.execute('refresh materialized view ofec_sched_a_aggregate_size_merged_mv')
        refreshed = models.ScheduleABySize.query.filter_by(
            size=0,
            cycle=2016,
            committee_id=committee_id,
        ).first()
        # Updated total includes new Schedule A filing and new report
        self.assertAlmostEqual(refreshed.total, total + 75 + 20)
        self.assertEqual(refreshed.count, None)
Example #7
0
def refresh():
    with manage.app.test_request_context():
        manage.update_aggregates()
        manage.refresh_materialized()
Example #8
0
    def _check_update_aggregate_existing(self, item_key, total_key,
                                         total_model, item_key_value):
        filing = self.NmlSchedAFactory(
            **{
                'rpt_yr': 2015,
                'cmte_id': 'X1234',
                'contb_receipt_amt': 504,
                'contb_receipt_dt': datetime.datetime(2015, 1, 1),
                'receipt_tp': '15J',
                item_key: item_key_value
            })
        self.FItemReceiptOrExp(
            sub_id=filing.sub_id,
            rpt_yr=2015,
        )
        db.session.commit()
        existing = total_model.query.filter(
            total_model.cycle == 2016,
            getattr(total_model, total_key) == item_key_value,  # noqa
        ).first()
        total = existing.total
        count = existing.count
        self._clear_sched_a_queues()
        filing = self.NmlSchedAFactory(
            **{
                'rpt_yr': 2015,
                'cmte_id': existing.committee_id,
                'contb_receipt_amt': 538,
                'contb_receipt_dt': datetime.datetime(2015, 1, 1),
                'receipt_tp': '15J',
                item_key: item_key_value
            })
        self.FItemReceiptOrExp(
            sub_id=filing.sub_id,
            rpt_yr=2015,
        )
        db.session.commit()
        db.session.refresh(existing)
        self.assertEqual(existing.total, total + 538)
        self.assertEqual(existing.count, count + 1)

        # Create a committee and committee report
        # Changed to point to sampled data, may be problematic in the future if det sum table
        # changes a lot and hence the tests need to test new behavior, believe it's fine for now though. -jcc
        rep = sa.Table('v_sum_and_det_sum_report',
                       db.metadata,
                       schema='disclosure',
                       autoload=True,
                       autoload_with=db.engine)
        ins = rep.insert().values(
            indv_unitem_contb=20,
            cmte_id=committee_id,
            rpt_yr=2016,
            orig_sub_id=9,
            form_tp_cd='F3',
        )
        db.session.execute(ins)
        db.session.commit()
        manage.update_aggregates()
        db.session.execute('refresh materialized view ofec_totals_combined_mv')
        db.session.execute(
            'refresh materialized view ofec_sched_a_aggregate_size_merged_mv')
        refreshed = models.ScheduleABySize.query.filter_by(
            size=0,
            cycle=2016,
            committee_id=committee_id,
        ).first()
        # Updated total includes new Schedule A filing and new report
        self.assertAlmostEqual(refreshed.total, total + 75 + 20)
        self.assertEqual(refreshed.count, None)
Example #9
0
    def _check_update_aggregate_existing(self, item_key, total_key,
                                         total_model, item_key_value):
        filing = self.NmlSchedAFactory(
            **{
                'rpt_yr': 2015,
                'cmte_id': 'X1234',
                'contb_receipt_amt': 504,
                'contb_receipt_dt': datetime.datetime(2015, 1, 1),
                'receipt_tp': '15J',
                item_key: item_key_value
            })
        self.FItemReceiptOrExp(
            sub_id=filing.sub_id,
            rpt_yr=2015,
        )
        db.session.commit()
        manage.update_aggregates()
        existing = total_model.query.filter(
            total_model.cycle == 2016,
            getattr(total_model, total_key) == item_key_value,  # noqa
        ).first()
        total = existing.total
        count = existing.count
        self._clear_sched_a_queues()
        filing = self.NmlSchedAFactory(
            **{
                'rpt_yr': 2015,
                'cmte_id': existing.committee_id,
                'contb_receipt_amt': 538,
                'contb_receipt_dt': datetime.datetime(2015, 1, 1),
                'receipt_tp': '15J',
                item_key: item_key_value
            })
        self.FItemReceiptOrExp(
            sub_id=filing.sub_id,
            rpt_yr=2015,
        )
        db.session.commit()
        manage.update_aggregates()
        db.session.refresh(existing)
        self.assertEqual(existing.total, total + 538)
        self.assertEqual(existing.count, count + 1)

        # def test_update_aggregate_create(self):
        #     self._check_update_aggregate_create('contbr_zip', 'zip', models.ScheduleAByZip, '19041')
        #     self._check_update_aggregate_create('contbr_st', 'state', models.ScheduleAByState, 'PA')
        #     self._check_update_aggregate_create('contbr_employer', 'employer', models.ScheduleAByEmployer, 'PET CHOW')
        #     self._check_update_aggregate_create('contbr_occupation', 'occupation', models.ScheduleAByOccupation, 'FURRIER')

        # def test_update_aggregate_existing(self):
        #     faker = Faker()
        #     self._check_update_aggregate_existing('contbr_zip', 'zip', models.ScheduleAByZip, faker.zipcode())
        #     self._check_update_aggregate_existing('contbr_st', 'state', models.ScheduleAByState, faker.state_abbr())
        #     self._check_update_aggregate_existing(
        #         'contbr_employer', 'employer', models.ScheduleAByEmployer, faker.company()[:38])
        #     self._check_update_aggregate_existing(
        #         'contbr_occupation', 'occupation', models.ScheduleAByOccupation, faker.job()[:38])

        # def test_update_aggregate_state_existing_null_amount(self):
        #     existing = models.ScheduleAByState.query.filter_by(
        #         cycle=2016,
        #     ).first()
        #     total = existing.total
        #     count = existing.count
        #     self.NmlSchedAFactory(
        #         rpt_yr=2015,
        #         cmte_id=existing.committee_id,
        #         contbr_st=existing.state,
        #         contb_receipt_amt=None,
        #         contb_receipt_dt=datetime.datetime(2015, 1, 1),
        #         receipt_tp='15J',
        #     )
        #     db.session.flush()
        #     manage.update_aggregates()
        #     manage.refresh_itemized()
        #     db.session.refresh(existing)
        #     self.assertEqual(existing.total, total)
        #     self.assertEqual(existing.count, count)

        # def test_update_aggregate_asize_create(self):
        #     filing = self.NmlSchedAFactory(
        #         rpt_yr=2015,
        #         cmte_id='C6789',
        #         contb_receipt_amt=538,
        #         contb_receipt_dt=datetime.datetime(2015, 1, 1),
        #         receipt_tp='15J',
        #     )
        #     self.FItemReceiptOrExp(
        #         sub_id=filing.sub_id,
        #         rpt_yr=2015,
        #     )
        #     db.session.commit()
        #     manage.update_aggregates()
        #     db.session.execute('refresh materialized view ofec_sched_a_aggregate_size_merged_mv')
        #     rows = models.ScheduleABySize.query.filter_by(
        #         cycle=2016,
        #         committee_id='C6789',
        #         size=500,
        #     ).all()
        #     self.assertEqual(len(rows), 1)
        #     self.assertEqual(rows[0].total, 538)
        #     self.assertEqual(rows[0].count, 1)
        #     filing.contb_receipt_amt = 53
        #     db.session.add(filing)
        #     db.session.commit()
        #     manage.update_aggregates()
        #     db.session.execute('refresh materialized view ofec_sched_a_aggregate_size_merged_mv')
        #     db.session.refresh(rows[0])
        #     self.assertEqual(rows[0].total, 0)
        #     self.assertEqual(rows[0].count, 0)

        # def test_update_aggregate_asize_existing(self):
        #     def get_existing():
        #         return models.ScheduleABySize.query.filter_by(
        #             size=500,
        #             cycle=2016,
        #         ).order_by(
        #             models.ScheduleABySize.committee_id,
        #         ).first()
        #     EXISTING_RECEIPT_AMOUNT = 504
        #     filing = self.NmlSchedAFactory(
        #         rpt_yr=2015,
        #         cmte_id='X1234',
        #         contb_receipt_amt=EXISTING_RECEIPT_AMOUNT,
        #         contb_receipt_dt=datetime.datetime(2015, 1, 1),
        #         receipt_tp='15J',
        #     )
        #     self.FItemReceiptOrExp(
        #         sub_id=filing.sub_id,
        #         rpt_yr=2015,
        #     )
        #     db.session.commit()
        #     manage.update_aggregates()
        #     db.session.execute('refresh materialized view ofec_sched_a_aggregate_size_merged_mv')
        #     self._clear_sched_a_queues()
        #     existing = get_existing()
        #     total = existing.total
        #     count = existing.count
        #     NEW_RECEIPT_AMOUNT = 538
        #     filing = self.NmlSchedAFactory(
        #         rpt_yr=2015,
        #         cmte_id=existing.committee_id,
        #         contb_receipt_amt=NEW_RECEIPT_AMOUNT,
        #         contb_receipt_dt=datetime.datetime(2015, 1, 1),
        #         receipt_tp='15J',
        #     )
        #     self.FItemReceiptOrExp(
        #         sub_id=filing.sub_id,
        #         rpt_yr=2015,
        #     )
        #     db.session.commit()
        #     manage.update_aggregates()
        #     db.session.execute('refresh materialized view ofec_sched_a_aggregate_size_merged_mv')
        #     existing = get_existing()
        #     self.assertEqual(existing.total, total + NEW_RECEIPT_AMOUNT)
        #     self.assertEqual(existing.count, count + 1)

        # def test_update_aggregate_size_existing_merged(self):
        #     def get_existing():
        #         return models.ScheduleABySize.query.filter_by(
        #             size=0,
        #             cycle=2016,
        #         ).order_by(
        #             models.ScheduleABySize.committee_id,
        #         ).first()
        #     EXISTING_RECEIPT_AMOUNT = 24
        #     filing = self.NmlSchedAFactory(
        #         rpt_yr=2015,
        #         cmte_id='X1235',
        #         contb_receipt_amt=EXISTING_RECEIPT_AMOUNT,
        #         contb_receipt_dt=datetime.datetime(2015, 1, 1),
        #         receipt_tp='15J',
        #     )
        #     self.FItemReceiptOrExp(
        #         sub_id=filing.sub_id,
        #         rpt_yr=2015,
        #     )
        #     db.session.commit()
        #     manage.update_aggregates()
        #     db.session.execute('refresh materialized view ofec_totals_combined_mv')
        #     db.session.execute('refresh materialized view ofec_sched_a_aggregate_size_merged_mv')
        #     self._clear_sched_a_queues()
        #     existing = get_existing()
        #     total = existing.total
        #     committee_id = existing.committee_id
        #     filing = self.NmlSchedAFactory(
        #         rpt_yr=2015,
        #         cmte_id=committee_id,
        #         contb_receipt_amt=75,
        #         contb_receipt_dt=datetime.datetime(2015, 1, 1),
        #         receipt_tp='15J',
        #     )
        #     self.FItemReceiptOrExp(
        #         sub_id=filing.sub_id,
        #         rpt_yr=2015,
        #     )

        # Create a committee and committee report
        # Changed to point to sampled data, may be problematic in the future if det sum table
        # changes a lot and hence the tests need to test new behavior, believe it's fine for now though. -jcc
        rep = sa.Table('v_sum_and_det_sum_report',
                       db.metadata,
                       schema='disclosure',
                       autoload=True,
                       autoload_with=db.engine)
        ins = rep.insert().values(
            indv_unitem_contb=20,
            cmte_id=committee_id,
            rpt_yr=2016,
            orig_sub_id=9,
            form_tp_cd='F3',
        )
        db.session.execute(ins)
        db.session.commit()
        manage.update_aggregates()
        db.session.execute('refresh materialized view ofec_totals_combined_mv')
        db.session.execute(
            'refresh materialized view ofec_sched_a_aggregate_size_merged_mv')
        refreshed = models.ScheduleABySize.query.filter_by(
            size=0,
            cycle=2016,
            committee_id=committee_id,
        ).first()
        # Updated total includes new Schedule A filing and new report
        self.assertAlmostEqual(refreshed.total, total + 75 + 20)
        self.assertEqual(refreshed.count, None)