├── lambda ├── __init__.py ├── upload_pdf │ ├── __init__.py │ ├── requirements.txt │ ├── .env │ └── lambda_function.py └── create_officer_zip │ ├── __init__.py │ ├── tests │ ├── __init__.py │ ├── pdf │ │ ├── 2646152 │ │ └── 2646153 │ └── xlsx │ │ ├── accused.xlsx │ │ ├── investigator.xlsx │ │ └── use_of_force.xlsx │ ├── .env │ └── requirements.txt ├── cpdb ├── alias │ ├── __init__.py │ ├── tests │ │ └── __init__.py │ ├── serializers.py │ ├── utils.py │ └── constants.py ├── cms │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── views │ │ │ └── __init__.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ └── __init__.py │ │ ├── serializers │ │ │ └── __init__.py │ │ ├── files │ │ │ └── reporting.csv │ │ ├── test_factories.py │ │ └── test_utils.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ └── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ ├── 0012_delete_faqpage.py │ │ ├── 0006_faqpage_order.py │ │ ├── 0008_faqpage_starred.py │ │ ├── 0013_remove_report_page_model.py │ │ └── 0009_reportpage_officers.py │ ├── models │ │ ├── __init__.py │ │ └── slug_page.py │ ├── utils.py │ └── permissions.py ├── config │ ├── __init__.py │ ├── settings │ │ ├── __init__.py │ │ ├── circleci.py │ │ └── test_without_migrations.py │ ├── tests │ │ ├── __init__.py │ │ └── test_urls.py │ ├── logging_filters.py │ └── wsgi.py ├── cr │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── views │ │ │ └── __init__.py │ │ └── serializers │ │ │ └── __init__.py │ └── serializers │ │ └── __init__.py ├── data │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── admin │ │ │ └── __init__.py │ │ ├── utils │ │ │ └── __init__.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── test_cache_data.py │ │ │ │ └── test_import_cr_summary.py │ │ ├── models │ │ │ ├── __init__.py │ │ │ ├── test_officer_history.py │ │ │ ├── test_officer_badge_number.py │ │ │ ├── test_victim.py │ │ │ ├── test_complainant.py │ │ │ ├── test_involvement.py │ │ │ └── test_salary.py │ │ ├── cache_managers │ │ │ └── __init__.py │ │ └── data_sample │ │ │ ├── __init__.py │ │ │ ├── units.csv │ │ │ └── cr_summary.csv │ ├── utils │ │ ├── __init__.py │ │ ├── round.py │ │ ├── subqueries.py │ │ ├── attachment_file.py │ │ └── interpolate.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ ├── clear_cache.py │ │ │ ├── cache_data.py │ │ │ └── fix_community_area_type.py │ ├── migrations │ │ ├── __init__.py │ │ ├── 0110_merge_20190108_0253.py │ │ ├── 0090_merge_20181129_2015.py │ │ ├── 0097_merge_20190101_2250.py │ │ ├── 0004_merge.py │ │ ├── 0008_merge.py │ │ ├── 0003_merge.py │ │ ├── 0029_merge_20180207_2137.py │ │ ├── 0028_merge_20180131_1334.py │ │ ├── 0058_merge_20180617_2214.py │ │ ├── 0060_merge_058_and_059.py │ │ ├── 0098_attachmentfile_text_content.py │ │ ├── 0112_attachmentfile_show.py │ │ ├── 0133_auto_20240716_1545.py │ │ ├── 0134_auto_20240716_1556.py │ │ ├── 0095_rename_timestamp_to_created_at.py │ │ ├── 0122_attachmentfile_is_external_ocr.py │ │ ├── 0118_attachmentfile_reprocess_text_count.py │ │ ├── 0135_add_investigating_agency_column.py │ │ ├── 0129_add_db_index_to_allegation_category.py │ │ ├── 0020_rename_field_type_to_award_type.py │ │ ├── 0036_policeunit_active.py │ │ ├── 0106_add_field_police_witnesses.py │ │ ├── 0119_add_is_extracted_summary_field_to_allegation.py │ │ ├── 0128_officer_allegations.py │ │ ├── 0019_auto_20171019_0153.py │ │ ├── 0009_officer_rank_increase_length.py │ │ ├── 0099_attachmentrequest_noti_email_sent.py │ │ ├── 0006_officer_rank_freeform.py │ │ ├── 0007_policeunit_description.py │ │ ├── 0021_officer_resignation_date.py │ │ ├── 0107_remove_area_line_area_from_allegation.py │ │ ├── 0024_allegation_is_officer_complaint.py │ │ ├── 0032_officer_middle_initial2.py │ │ ├── 0083_salary_rank_changed.py │ │ ├── 0095_attachmenrequest_bulk_objects_manager.py │ │ ├── 0085_officer_has_unique_name.py │ │ ├── 0058_allegation_old_complaint_address.py │ │ ├── 0084_attachmentrequest_added_to_foia_airtable.py │ │ ├── 0068_attachmentfile_external_id.py │ │ ├── 0027_officer_complaint_percentile.py │ │ └── 0103_remove_attachment_allegation_old_fk.py │ ├── admin │ │ └── __init__.py │ ├── models │ │ ├── race_population.py │ │ ├── attachment_ocr.py │ │ ├── officer_alias.py │ │ ├── line_area.py │ │ ├── police_witness.py │ │ ├── common.py │ │ └── attachment_narrative.py │ ├── templates │ │ └── attachment_changelist.html │ ├── validators.py │ └── cache_managers │ │ └── __init__.py ├── popup │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ └── test_models.py │ ├── migrations │ │ └── __init__.py │ ├── models │ │ ├── __init__.py │ │ └── popup.py │ ├── admin.py │ ├── serializers.py │ ├── factories.py │ └── views.py ├── search │ ├── urls.py │ ├── tests │ │ ├── __init__.py │ │ ├── commands │ │ │ └── __init__.py │ │ └── serializers │ │ │ └── __init__.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ └── __init__.py │ ├── pagination.py │ ├── __init__.py │ ├── constants.py │ ├── indices.py │ ├── serializers │ │ ├── __init__.py │ │ ├── trr_recent_serializer.py │ │ └── lawsuit_recent_serializer.py │ └── utils.py ├── shared │ ├── __init__.py │ ├── tests │ │ └── __init__.py │ ├── browsable_api_renderder_without_form.py │ └── aws.py ├── status │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ └── test_views.py │ └── views.py ├── toast │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ └── test_models.py │ ├── migrations │ │ └── __init__.py │ ├── models │ │ ├── __init__.py │ │ └── toast.py │ ├── constants.py │ ├── factories.py │ ├── admin.py │ └── serializers.py ├── trr │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── models │ │ │ └── __init__.py │ │ ├── views │ │ │ └── __init__.py │ │ └── serializers │ │ │ └── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ ├── 0021_auto_20240610_2200.py │ │ ├── 0018_auto_20240527_1741.py │ │ ├── 0019_auto_20240610_2108.py │ │ ├── 0020_auto_20240610_2151.py │ │ ├── 0016_rename_timestamp_to_created_at.py │ │ └── 0002_alter_trr_subject_id_type.py │ ├── serializers │ │ └── __init__.py │ ├── admin.py │ └── models │ │ ├── __init__.py │ │ ├── subject_weapon.py │ │ └── charge.py ├── units │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ └── mixins.py │ ├── index_aliases.py │ ├── doc_types.py │ └── views.py ├── utils │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ └── models │ │ │ └── __init__.py │ ├── models │ │ └── __init__.py │ └── raw_query_utils.py ├── vftg │ ├── __init__.py │ ├── tests │ │ └── __init__.py │ └── views.py ├── xlsx │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ ├── commands │ │ │ │ └── __init__.py │ │ │ └── utils │ │ │ │ ├── __init__.py │ │ │ │ └── test_export_officer_xlsx │ │ │ │ └── csv │ │ │ │ ├── accused_8562 │ │ │ │ ├── Victim.csv │ │ │ │ ├── Beat.csv │ │ │ │ └── Police Witness.csv │ │ │ │ └── investigator_1234 │ │ │ │ ├── Victim.csv │ │ │ │ ├── Beat.csv │ │ │ │ └── Police Witness.csv │ │ └── writers │ │ │ ├── __init__.py │ │ │ ├── test_accused_xlsx_writer │ │ │ └── csv │ │ │ │ ├── empty │ │ │ │ ├── Victim.csv │ │ │ │ ├── Beat.csv │ │ │ │ ├── Allegation.csv │ │ │ │ ├── Police Witness.csv │ │ │ │ └── Coaccused Officer.csv │ │ │ │ └── accused_8562 │ │ │ │ ├── Victim.csv │ │ │ │ ├── Beat.csv │ │ │ │ ├── Police Witness.csv │ │ │ │ └── Allegation.csv │ │ │ ├── test_officer_xlsx_writer │ │ │ └── csv │ │ │ │ ├── Allegation.csv │ │ │ │ └── Officer.csv │ │ │ ├── test_investigator_xlsx_writer │ │ │ └── csv │ │ │ │ ├── empty │ │ │ │ ├── Victim.csv │ │ │ │ ├── Beat.csv │ │ │ │ ├── Allegation.csv │ │ │ │ ├── Accused Officer.csv │ │ │ │ └── Police Witness.csv │ │ │ │ └── investigator_1234 │ │ │ │ ├── Victim.csv │ │ │ │ ├── Beat.csv │ │ │ │ └── Police Witness.csv │ │ │ ├── test_documents_xlsx_writer │ │ │ └── csv │ │ │ │ ├── empty │ │ │ │ ├── Complaint Documents.csv │ │ │ │ └── Investigation Documents.csv │ │ │ │ └── documents_1 │ │ │ │ ├── Complaint Documents.csv │ │ │ │ └── Investigation Documents.csv │ │ │ └── test_use_of_force_xlsx_writer │ │ │ └── csv │ │ │ └── empty │ │ │ └── Use Of Force.csv │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ └── __init__.py │ ├── serializers │ │ ├── __init__.py │ │ ├── victim_xlsx_serializer.py │ │ ├── area_xlsx_serializer.py │ │ └── attachment_xlsx_serializer.py │ ├── writers │ │ └── __init__.py │ └── constants.py ├── analytics │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ └── __init__.py │ │ ├── models │ │ │ └── __init__.py │ │ └── test_utils │ │ │ └── __init__.py │ ├── utils │ │ ├── __init__.py │ │ └── clicky_tracking.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ └── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ └── 0004_alter_searchtracking_query_type.py │ ├── models │ │ ├── __init__.py │ │ ├── event.py │ │ └── search_tracking.py │ ├── filters.py │ ├── serializers.py │ └── constants.py ├── app_config │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ └── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ └── __init__.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── create_initial_app_config.py │ ├── migrations │ │ └── __init__.py │ ├── validators │ │ ├── __init__.py │ │ └── visual_token_color_validators.py │ ├── admin │ │ ├── __init__.py │ │ ├── app_config_admin.py │ │ └── visual_token_color_admin.py │ ├── serializers │ │ ├── __init__.py │ │ └── visual_token_color_serializer.py │ ├── models │ │ ├── __init__.py │ │ └── app_config.py │ └── constants.py ├── heatmap │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ └── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ └── __init__.py │ └── management │ │ ├── __init__.py │ │ └── commands │ │ └── __init__.py ├── lawsuit │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── models │ │ │ └── __init__.py │ │ ├── importers │ │ │ └── __init__.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ └── __init__.py │ │ ├── serializers │ │ │ └── __init__.py │ │ └── cache_managers │ │ │ └── __init__.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ └── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ ├── 0003_lawsuit_primary_cause.py │ │ ├── 0009_change_lawsuit_location_max_length.py │ │ ├── 0010_remove_lawsuit_plaintiff_unique_constraint.py │ │ ├── 0006_lawsuit_total_payments.py │ │ ├── 0002_lawsuit_point.py │ │ └── 0007_alter_officers_fields_in_lawsuits.py │ ├── cache_managers │ │ └── __init__.py │ ├── importers │ │ └── __init__.py │ ├── serializers │ │ ├── __init__.py │ │ └── top_lawsuit_serializer.py │ └── models │ │ └── __init__.py ├── officers │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── test_indexers.py │ │ ├── views │ │ │ └── __init__.py │ │ ├── indexers │ │ │ └── __init__.py │ │ └── serializers │ │ │ └── __init__.py │ ├── serializers │ │ ├── __init__.py │ │ └── doc_serializers.py │ ├── query_helpers │ │ └── __init__.py │ ├── index_aliases.py │ └── indexers │ │ └── __init__.py ├── pinboard │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── views │ │ │ └── __init__.py │ │ ├── serializers │ │ │ ├── __init__.py │ │ │ ├── desktop │ │ │ │ ├── __init__.py │ │ │ │ ├── admin │ │ │ │ │ └── __init__.py │ │ │ │ ├── common │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_victim_serializer.py │ │ │ │ ├── pinned │ │ │ │ │ └── __init__.py │ │ │ │ └── relevant │ │ │ │ │ └── __init__.py │ │ │ └── mobile │ │ │ │ ├── __init__.py │ │ │ │ ├── common │ │ │ │ └── __init__.py │ │ │ │ ├── pinned │ │ │ │ └── __init__.py │ │ │ │ └── relevant │ │ │ │ └── __init__.py │ │ └── models │ │ │ └── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ └── 0002_add_trrs_to_pinboard.py │ ├── serializers │ │ ├── __init__.py │ │ ├── desktop │ │ │ ├── __init__.py │ │ │ ├── admin │ │ │ │ ├── __init__.py │ │ │ │ ├── officer_serializer.py │ │ │ │ ├── trr_serializer.py │ │ │ │ └── allegation_serializer.py │ │ │ ├── pinned │ │ │ │ ├── officer_serializer.py │ │ │ │ └── __init__.py │ │ │ ├── common │ │ │ │ ├── __init__.py │ │ │ │ └── victim_serializer.py │ │ │ └── relevant │ │ │ │ ├── __init__.py │ │ │ │ ├── document_serializer.py │ │ │ │ └── allegation_serializer.py │ │ ├── mobile │ │ │ ├── __init__.py │ │ │ ├── pinned │ │ │ │ ├── officer_serializer.py │ │ │ │ └── __init__.py │ │ │ ├── common │ │ │ │ └── __init__.py │ │ │ └── relevant │ │ │ │ ├── officer_serializer.py │ │ │ │ ├── __init__.py │ │ │ │ ├── document_serializer.py │ │ │ │ └── allegation_serializer.py │ │ └── example_pinboard.py │ ├── constants.py │ └── utils.py ├── sitemap │ ├── __init__.py │ ├── sitemaps │ │ ├── __init__.py │ │ ├── trr_sitemap.py │ │ ├── unit_sitemap.py │ │ ├── officer_sitemap.py │ │ ├── allegation_sitemap.py │ │ ├── base_sitemap.py │ │ ├── attachment_sitemap.py │ │ └── static_page_sitemap.py │ └── tests │ │ ├── __init__.py │ │ └── sitemaps │ │ └── __init__.py ├── tracker │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ └── __init__.py │ │ ├── serializers │ │ │ └── __init__.py │ │ └── mixins.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ └── __init__.py │ ├── constants.py │ └── index_aliases.py ├── twitterbot │ ├── __init__.py │ ├── models.py │ ├── tests │ │ ├── __init__.py │ │ ├── handlers │ │ │ └── __init__.py │ │ ├── utils │ │ │ └── __init__.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ └── __init__.py │ │ └── mixins.py │ ├── utils │ │ ├── __init__.py │ │ ├── user_input.py │ │ └── cryptography.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ ├── list_webhooks.py │ │ │ └── list_subscriptions.py │ ├── migrations │ │ ├── __init__.py │ │ └── 0003_auto_20171019_2145.py │ ├── models │ │ ├── twitter_bot_visit_log.py │ │ ├── respone_template.py │ │ └── __init__.py │ ├── serializers.py │ └── constants.py ├── activity_grid │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── models │ │ │ └── __init__.py │ │ └── cache_managers │ │ │ └── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ ├── 0007_activitypaircard_coaccusal_count.py │ │ └── 0002_activitycard_important.py │ ├── cache_managers │ │ ├── __init__.py │ │ └── activity_pair_card_cache_manager.py │ └── models │ │ ├── __init__.py │ │ └── activity_card.py ├── activity_log │ ├── __init__.py │ ├── tests │ │ └── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── apps.py │ └── constants.py ├── authentication │ ├── __init__.py │ └── tests │ │ └── __init__.py ├── data_importer │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── management │ │ │ └── __init__.py │ │ └── copa_crawler │ │ │ └── __init__.py │ ├── copa_crawler │ │ └── __init__.py │ └── management │ │ ├── __init__.py │ │ └── commands │ │ └── __init__.py ├── document_cloud │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ └── __init__.py │ │ ├── models │ │ │ └── __init__.py │ │ └── services │ │ │ └── __init__.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ └── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ ├── 0006_merge_20181129_2015.py │ │ ├── 0007_rename_timestamp_to_created_at.py │ │ └── 0011_documentcrawler_log_key.py │ ├── models │ │ ├── __init__.py │ │ └── document_cloud_search_query.py │ └── constants.py ├── email_service │ ├── __init__.py │ ├── tests │ │ └── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── backend.py │ ├── constants.py │ └── admin.py ├── es_index │ ├── tests │ │ ├── __init__.py │ │ ├── commands │ │ │ └── __init__.py │ │ └── test_register_indexer.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── rebuild_index_daily.py │ ├── constants.py │ ├── analyzers.py │ ├── utils.py │ ├── indices.py │ └── __init__.py ├── search_mobile │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ └── serializers │ │ │ ├── __init__.py │ │ │ └── test_trr_recent_serializer.py │ ├── apps.py │ ├── serializers │ │ ├── lawsuit_recent_serializer.py │ │ ├── trr_recent_serializer.py │ │ ├── lawsuit_serializer.py │ │ ├── officer_recent_serializer.py │ │ └── __init__.py │ └── queries.py ├── search_terms │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ └── views │ │ │ └── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ ├── 0009_make_slug_unique.py │ │ ├── 0003_alter_nullable_description.py │ │ ├── 0007_alter_uuid.py │ │ └── 0010_change_link_to_char.py │ ├── models │ │ └── __init__.py │ ├── views.py │ └── factories.py ├── social_graph │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── queries │ │ │ └── __init__.py │ │ ├── views │ │ │ └── __init__.py │ │ └── serializers │ │ │ ├── __init__.py │ │ │ └── test_victim_serializer.py │ ├── serializers │ │ ├── allegation_serializer.py │ │ ├── officer_serializer.py │ │ ├── victim_serializer.py │ │ └── accused_serializer.py │ └── queries │ │ └── __init__.py ├── airtable_integration │ ├── __init__.py │ ├── tests │ │ ├── __init__.py │ │ ├── services │ │ │ └── __init__.py │ │ └── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ └── __init__.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ └── __init__.py │ └── services │ │ └── __init__.py ├── package-lock.json └── data-updates │ ├── awards │ └── awards.csv │ ├── trrs │ ├── trr_main.csv │ ├── trr_statuses.csv │ ├── trr_subjects.csv │ ├── trr_subject_weapons.csv │ ├── trr_weapon_discharges.csv │ └── trr_actions_responses.csv │ ├── complaints │ ├── victims.csv │ ├── complainants.csv │ ├── cpd_witnesses.csv │ ├── investigators.csv │ ├── civilian_witnesses.csv │ ├── complaints-accused.csv │ └── complaints-complaints.csv │ ├── salaries │ └── salaries.csv │ ├── officers │ └── final-profiles.csv │ └── unit_history │ └── unit-history.csv ├── .gitsecret ├── keys │ ├── mapping.cfg │ ├── crls.d │ │ └── DIR.txt │ ├── pubring.kbx │ └── pubring.kbx~ └── paths │ └── mapping.cfg ├── docker ├── cpdpbot │ ├── VERSION │ └── requirements.txt ├── postgres │ ├── init-scripts │ │ └── create-data-folder.sh │ └── Dockerfile ├── google-cloud-sdk │ └── Dockerfile └── remote_syslog2 │ └── log_files.yml ├── ansible ├── inventory │ └── notebook ├── roles │ └── notebook │ │ ├── handlers │ │ └── main.yml │ │ ├── templates │ │ ├── pam_environment.j2 │ │ ├── jupyter_notebook_config.json.j2 │ │ ├── start_jupyter.sh.j2 │ │ └── jupyter.conf.j2 │ │ ├── tasks │ │ └── main.yml │ │ ├── defaults │ │ └── main.yml │ │ └── files │ │ ├── install-python.sh │ │ └── create-env.sh └── notebook.yml ├── .gitattributes ├── beta.env.secret ├── prod.env.secret ├── staging.env.secret ├── bin ├── build_apiary.sh ├── setup_notebook.sh ├── test.sh ├── coverage.sh └── shows_pr_since_last_deploy ├── pg-credentials.json.secret ├── kubernetes ├── secrets-beta.yml.secret ├── secrets-staging.yml.secret ├── secrets-production.yml.secret └── namespaces.yml ├── .pre-commit-config.yaml ├── requirements ├── local.txt └── test.txt ├── .coveragerc ├── setup.cfg ├── apiary ├── app_config.md ├── officer_create_zip_file.md ├── city_summary.md ├── analytic_events.md ├── pinboard_latest_retrieved.md ├── officer_request_download.md ├── officer_timeline_mini_map.md └── toast_mobile.md ├── .dockerignore └── .editorconfig /lambda/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/alias/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cms/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/config/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cr/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/popup/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search/urls.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/shared/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/status/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/toast/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/trr/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/units/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/vftg/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/xlsx/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitsecret/keys/mapping.cfg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/alias/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/analytics/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/app_config/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cms/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cr/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/heatmap/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/officers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/popup/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/sitemap/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/toast/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/tracker/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/trr/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/models.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/units/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/utils/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/vftg/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/activity_grid/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/activity_log/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/analytics/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/analytics/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/app_config/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/authentication/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cms/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cms/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cms/tests/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/config/settings/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/config/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cr/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cr/tests/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/tests/admin/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/tests/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data_importer/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/document_cloud/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/email_service/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/es_index/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/heatmap/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/officers/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/popup/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search_mobile/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search_terms/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/shared/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/sitemap/sitemaps/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/sitemap/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/social_graph/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/status/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/toast/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/tracker/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/trr/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/trr/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/trr/tests/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/trr/tests/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/utils/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/xlsx/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/xlsx/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/xlsx/writers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docker/cpdpbot/VERSION: -------------------------------------------------------------------------------- 1 | 0.1.2 2 | -------------------------------------------------------------------------------- /lambda/upload_pdf/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/activity_grid/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/activity_log/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/airtable_integration/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/analytics/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/analytics/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/app_config/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/app_config/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/authentication/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cms/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cms/tests/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cr/tests/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/tests/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data_importer/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/document_cloud/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/email_service/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/es_index/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/heatmap/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/tests/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/officers/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/officers/tests/test_indexers.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/officers/tests/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search/tests/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search_mobile/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search_terms/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/social_graph/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/tracker/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/trr/tests/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/utils/tests/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lambda/create_officer_zip/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lambda/upload_pdf/requirements.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitsecret/keys/crls.d/DIR.txt: -------------------------------------------------------------------------------- 1 | v:1: 2 | -------------------------------------------------------------------------------- /cpdb/activity_grid/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/activity_grid/tests/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/activity_log/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/airtable_integration/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/analytics/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/analytics/tests/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/analytics/tests/test_utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cms/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/tests/cache_managers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/tests/data_sample/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data_importer/copa_crawler/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data_importer/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/document_cloud/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/document_cloud/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/email_service/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/es_index/tests/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/heatmap/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/cache_managers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/tests/importers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/tests/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/officers/query_helpers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/officers/tests/indexers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/officers/tests/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search/tests/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search_terms/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search_terms/tests/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/sitemap/tests/sitemaps/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/social_graph/tests/queries/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/social_graph/tests/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/tracker/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/tracker/tests/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/tests/handlers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/tests/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/xlsx/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lambda/create_officer_zip/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/activity_grid/cache_managers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/airtable_integration/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/airtable_integration/services/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/analytics/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/app_config/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/app_config/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/cms/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data_importer/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/document_cloud/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/document_cloud/tests/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/document_cloud/tests/services/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/es_index/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/heatmap/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/tests/cache_managers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/officers/serializers/doc_serializers.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/serializers/desktop/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/serializers/mobile/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/search_mobile/tests/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/social_graph/tests/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/tracker/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/management/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/activity_grid/tests/cache_managers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/airtable_integration/tests/services/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/analytics/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/app_config/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data_importer/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/data_importer/tests/copa_crawler/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/document_cloud/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/heatmap/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/lawsuit/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/serializers/desktop/admin/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/serializers/desktop/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/serializers/mobile/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/tracker/constants.py: -------------------------------------------------------------------------------- 1 | TAG_MAX_LENGTH = 20 2 | -------------------------------------------------------------------------------- /cpdb/tracker/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/twitterbot/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lambda/upload_pdf/.env: -------------------------------------------------------------------------------- 1 | FUNCTION_NAME=uploadPdf 2 | -------------------------------------------------------------------------------- /ansible/inventory/notebook: -------------------------------------------------------------------------------- 1 | [notebook] 2 | 52.230.80.72 3 | -------------------------------------------------------------------------------- /cpdb/airtable_integration/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/airtable_integration/tests/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/document_cloud/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/serializers/desktop/admin/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/serializers/desktop/common/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/serializers/desktop/pinned/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/serializers/mobile/common/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/serializers/mobile/pinned/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/social_graph/serializers/allegation_serializer.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/airtable_integration/tests/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "lockfileVersion": 1 3 | } 4 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/serializers/desktop/relevant/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/serializers/mobile/relevant/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lambda/create_officer_zip/.env: -------------------------------------------------------------------------------- 1 | FUNCTION_NAME=createOfficerZipFile 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | cpdb/data-updates/**/*.csv filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /beta.env.secret: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/beta.env.secret -------------------------------------------------------------------------------- /cpdb/popup/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .popup import Popup 2 | 3 | __all__ = ['Popup'] 4 | -------------------------------------------------------------------------------- /cpdb/toast/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .toast import Toast 2 | 3 | __all__ = ['Toast'] 4 | -------------------------------------------------------------------------------- /lambda/create_officer_zip/requirements.txt: -------------------------------------------------------------------------------- 1 | zipstream==1.1.4 2 | smart_open==1.7.1 3 | -------------------------------------------------------------------------------- /prod.env.secret: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/prod.env.secret -------------------------------------------------------------------------------- /cpdb/pinboard/constants.py: -------------------------------------------------------------------------------- 1 | PINBOARD_TITLE_DUPLICATE_PATTERN = '(.*) copy(?: (\d+))?$' 2 | -------------------------------------------------------------------------------- /cpdb/app_config/validators/__init__.py: -------------------------------------------------------------------------------- 1 | from .visual_token_color_validators import * # NOQA 2 | -------------------------------------------------------------------------------- /cpdb/cms/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .slug_page import SlugPage 2 | 3 | __all__ = ['SlugPage'] 4 | -------------------------------------------------------------------------------- /staging.env.secret: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/staging.env.secret -------------------------------------------------------------------------------- /bin/build_apiary.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | hercule apiary/apiary.md -o apiary.apib && echo "Done" 3 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_accused_xlsx_writer/csv/empty/Victim.csv: -------------------------------------------------------------------------------- 1 | crid,gender,race,birth_year 2 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_officer_xlsx_writer/csv/Allegation.csv: -------------------------------------------------------------------------------- 1 | crid,summary 2 | 123456,Heaven 3 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_investigator_xlsx_writer/csv/empty/Victim.csv: -------------------------------------------------------------------------------- 1 | crid,gender,race,birth_year 2 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_officer_xlsx_writer/csv/Officer.csv: -------------------------------------------------------------------------------- 1 | name,gender 2 | Jerome Finnigan,Male 3 | -------------------------------------------------------------------------------- /.gitsecret/keys/pubring.kbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/.gitsecret/keys/pubring.kbx -------------------------------------------------------------------------------- /cpdb/twitterbot/utils/user_input.py: -------------------------------------------------------------------------------- 1 | def get_user_input(msg): # pragma: no cover 2 | return input(msg) 3 | -------------------------------------------------------------------------------- /pg-credentials.json.secret: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/pg-credentials.json.secret -------------------------------------------------------------------------------- /.gitsecret/keys/pubring.kbx~: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/.gitsecret/keys/pubring.kbx~ -------------------------------------------------------------------------------- /cpdb/data/tests/data_sample/units.csv: -------------------------------------------------------------------------------- 1 | Unit No.,Unit Description,Status 2 | 000,AREA 0,Y 3 | 001,DISTRICT 001,Y 4 | -------------------------------------------------------------------------------- /ansible/roles/notebook/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: reload nginx 4 | service: name=nginx state=reloaded 5 | -------------------------------------------------------------------------------- /docker/postgres/init-scripts/create-data-folder.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p $PGDATA 4 | chown postgres $PGDATA 5 | -------------------------------------------------------------------------------- /cpdb/data/admin/__init__.py: -------------------------------------------------------------------------------- 1 | from .attachment_request_admin import * # NOQA 2 | from .attachment_file_admin import * # NOQA 3 | -------------------------------------------------------------------------------- /cpdb/data/tests/data_sample/cr_summary.csv: -------------------------------------------------------------------------------- 1 | crid,summary 2 | 001,"Summary Text 01 is here" 3 | 002,"Summary Text 02 is here" 4 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_documents_xlsx_writer/csv/empty/Complaint Documents.csv: -------------------------------------------------------------------------------- 1 | title,url,date_discovered,text_content 2 | -------------------------------------------------------------------------------- /kubernetes/secrets-beta.yml.secret: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/kubernetes/secrets-beta.yml.secret -------------------------------------------------------------------------------- /ansible/roles/notebook/templates/pam_environment.j2: -------------------------------------------------------------------------------- 1 | NOTEBOOK_DB_PASSWORD={{notebook_db_password}} 2 | NOTEBOOK_DB_USER=notebook 3 | -------------------------------------------------------------------------------- /cpdb/units/index_aliases.py: -------------------------------------------------------------------------------- 1 | from es_index.index_aliases import IndexAlias 2 | 3 | 4 | units_index_alias = IndexAlias('units') 5 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_accused_xlsx_writer/csv/empty/Beat.csv: -------------------------------------------------------------------------------- 1 | name,area_type,median_income,commander,alderman,police_hq 2 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_documents_xlsx_writer/csv/empty/Investigation Documents.csv: -------------------------------------------------------------------------------- 1 | title,url,date_discovered,text_content 2 | -------------------------------------------------------------------------------- /kubernetes/secrets-staging.yml.secret: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/kubernetes/secrets-staging.yml.secret -------------------------------------------------------------------------------- /cpdb/config/settings/circleci.py: -------------------------------------------------------------------------------- 1 | from .test_without_migrations import * # NOQA 2 | 3 | SELENIUM_URL = 'http://localhost:4444/wd/hub' 4 | -------------------------------------------------------------------------------- /cpdb/tracker/index_aliases.py: -------------------------------------------------------------------------------- 1 | from es_index.index_aliases import IndexAlias 2 | 3 | 4 | tracker_index_alias = IndexAlias('tracker') 5 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_investigator_xlsx_writer/csv/empty/Beat.csv: -------------------------------------------------------------------------------- 1 | name,area_type,median_income,commander,alderman,police_hq 2 | -------------------------------------------------------------------------------- /kubernetes/secrets-production.yml.secret: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/kubernetes/secrets-production.yml.secret -------------------------------------------------------------------------------- /cpdb/activity_log/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ActivityLogConfig(AppConfig): 5 | name = 'activity_log' 6 | -------------------------------------------------------------------------------- /cpdb/lawsuit/importers/__init__.py: -------------------------------------------------------------------------------- 1 | from .lawsuit_importer import LawsuitImporter 2 | 3 | 4 | __all__ = [ 5 | 'LawsuitImporter' 6 | ] 7 | -------------------------------------------------------------------------------- /cpdb/officers/index_aliases.py: -------------------------------------------------------------------------------- 1 | from es_index.index_aliases import IndexAlias 2 | 3 | 4 | officers_index_alias = IndexAlias('officers') 5 | -------------------------------------------------------------------------------- /cpdb/es_index/constants.py: -------------------------------------------------------------------------------- 1 | from tracker.indexers import AttachmentFileIndexer 2 | 3 | DAILY_INDEXERS = [ 4 | AttachmentFileIndexer, 5 | ] 6 | -------------------------------------------------------------------------------- /lambda/create_officer_zip/tests/pdf/2646152: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/lambda/create_officer_zip/tests/pdf/2646152 -------------------------------------------------------------------------------- /lambda/create_officer_zip/tests/pdf/2646153: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/lambda/create_officer_zip/tests/pdf/2646153 -------------------------------------------------------------------------------- /ansible/roles/notebook/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - include: setup_pyenv.yml 4 | 5 | - include: setup_notebook.yml 6 | 7 | - include: setup_nginx.yml 8 | -------------------------------------------------------------------------------- /bin/setup_notebook.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | ansible-playbook ansible/notebook.yml -i ansible/inventory/notebook --vault-password-file ../vault_pass.txt 3 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_accused_xlsx_writer/csv/accused_8562/Victim.csv: -------------------------------------------------------------------------------- 1 | crid,gender,race,birth_year 2 | 1009678,Male,Hispanic,1973 3 | 1012803,,, 4 | -------------------------------------------------------------------------------- /lambda/create_officer_zip/tests/xlsx/accused.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/lambda/create_officer_zip/tests/xlsx/accused.xlsx -------------------------------------------------------------------------------- /cpdb/app_config/admin/__init__.py: -------------------------------------------------------------------------------- 1 | from .app_config_admin import AppConfigAdmin # NOQA 2 | from .visual_token_color_admin import VisualTokenColorAdmin # NOQA 3 | -------------------------------------------------------------------------------- /cpdb/app_config/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | from .visual_token_color_serializer import VisualTokenColorSerializer 2 | 3 | __all__ = ['VisualTokenColorSerializer'] 4 | -------------------------------------------------------------------------------- /cpdb/toast/constants.py: -------------------------------------------------------------------------------- 1 | TOAST_DESKTOP_TEMPLATE_NAMES = ['OFFICER', 'CR', 'TRR'] 2 | TOAST_MOBILE_TEMPLATE_NAMES = ['MOBILE OFFICER', 'MOBILE CR', 'MOBILE TRR'] 3 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/management/utils/test_export_officer_xlsx/csv/accused_8562/Victim.csv: -------------------------------------------------------------------------------- 1 | crid,gender,race,birth_year 2 | 1009678,Male,Hispanic,1973 3 | 1012803,,, 4 | -------------------------------------------------------------------------------- /cpdb/search/pagination.py: -------------------------------------------------------------------------------- 1 | from es_index.pagination import ESQueryPagination 2 | 3 | 4 | class SearchQueryPagination(ESQueryPagination): 5 | default_limit = 30 6 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/management/utils/test_export_officer_xlsx/csv/investigator_1234/Victim.csv: -------------------------------------------------------------------------------- 1 | crid,gender,race,birth_year 2 | 1009678,Male,Hispanic,1973 3 | 1012803,,, 4 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_investigator_xlsx_writer/csv/investigator_1234/Victim.csv: -------------------------------------------------------------------------------- 1 | crid,gender,race,birth_year 2 | 1009678,Male,Hispanic,1973 3 | 1012803,,, 4 | -------------------------------------------------------------------------------- /lambda/create_officer_zip/tests/xlsx/investigator.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/lambda/create_officer_zip/tests/xlsx/investigator.xlsx -------------------------------------------------------------------------------- /lambda/create_officer_zip/tests/xlsx/use_of_force.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/invinst/CPDBv2_backend/HEAD/lambda/create_officer_zip/tests/xlsx/use_of_force.xlsx -------------------------------------------------------------------------------- /bin/test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | bin/manage.sh --local makemigrations --dry-run && docker-compose run web python -m lambda.test && bin/manage.sh --local test $@ 4 | -------------------------------------------------------------------------------- /cpdb/app_config/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .app_config import AppConfig 2 | from .visual_token_color import VisualTokenColor 3 | 4 | __all__ = ['AppConfig', 'VisualTokenColor'] 5 | -------------------------------------------------------------------------------- /cpdb/data-updates/awards/awards.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:894fcbb7363c38f84394f5be466df330f62198cb8d6bf10f0f49030ba3587ebc 3 | size 78897483 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/trrs/trr_main.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:489530728dd60e5367ede7c3ed17acc956b99c7c270fd97ebf086012a473999a 3 | size 26518225 4 | -------------------------------------------------------------------------------- /ansible/roles/notebook/templates/jupyter_notebook_config.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "NotebookApp": { 3 | "password": "sha1:c1e15b14d995:ef01b00fa9cf0da7df12ba22c47878a60b6bbd52" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /cpdb/data-updates/complaints/victims.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:31a8af93952d73aea6b710dc5485319a91581384c63ed39bae9d133fd8837f09 3 | size 13118445 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/salaries/salaries.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9a9079106bc7d0f4592592c5cc0efee173ba8d9aa86959e3b260b1854b2c5e96 3 | size 34706349 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/trrs/trr_statuses.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:783b0919e807190203d69bf41dfac8082369db87f8e5284773f0fd11913411db 3 | size 37979798 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/trrs/trr_subjects.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:706526e98992ddcc35f0fb0bdfd3900953b78f16a6fa8f1599b766af11aaee07 3 | size 24325754 4 | -------------------------------------------------------------------------------- /cpdb/activity_grid/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .activity_card import ActivityCard 2 | from .activity_pair_card import ActivityPairCard 3 | 4 | __all__ = ['ActivityCard', 'ActivityPairCard'] 5 | -------------------------------------------------------------------------------- /cpdb/data-updates/complaints/complainants.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d4fea4b48072db2923e602b8d5454ec653e366409211c9edb5788fdf65e592d7 3 | size 15645159 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/complaints/cpd_witnesses.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9aca0f0ca544229dfe2740d8d59fed564ba7a3dec7441b49af4d635099cf386d 3 | size 15295963 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/complaints/investigators.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:30916fb8031904d0e236fe20037a454ff65fcad2ba0a52392072adeb59c0ff84 3 | size 34059864 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/officers/final-profiles.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:0bd11e91f8155c68875568b51527b194ba5ac4c2d3f7024b562abe9c3ab2a4a6 3 | size 77198083 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/trrs/trr_subject_weapons.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:30eefe30260a2067875944c6181d4d9615a4d8b0b4db5beaa3294564f85438ad 3 | size 5947011 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/trrs/trr_weapon_discharges.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1ff8840b2663223566fa0c9d4a50e896d741b901b54d3c55361906104177627b 3 | size 1256274 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/unit_history/unit-history.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:18c4d05f965d7ef9afcc44e93945a060e28b14e5cd3ef561eb59fe4e129f9254 3 | size 4288254 4 | -------------------------------------------------------------------------------- /cpdb/data/utils/round.py: -------------------------------------------------------------------------------- 1 | from django.db.models import Func 2 | 3 | 4 | class Round(Func): 5 | function = 'ROUND' 6 | template = '%(function)s(CAST(%(expressions)s as numeric), 4)' 7 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_accused_xlsx_writer/csv/accused_8562/Beat.csv: -------------------------------------------------------------------------------- 1 | name,area_type,median_income,commander,alderman,police_hq 2 | 0823,school-grounds,,,, 3 | 2511,school-grounds,,,, 4 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | repos: 3 | - repo: git://github.com/pre-commit/pre-commit-hooks 4 | rev: v2.0.0 5 | hooks: 6 | - id: flake8 7 | language_version: python3 8 | -------------------------------------------------------------------------------- /cpdb/data-updates/complaints/civilian_witnesses.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:de59454f9668a81be7769104168ea39dbd84df2888ec1f2514c2da4384ff1f24 3 | size 6783419 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/complaints/complaints-accused.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:11a202b5f6855b28cf2a2bfd60f745803ad6223186da6e57aa660e20aa473abe 3 | size 78619861 4 | -------------------------------------------------------------------------------- /cpdb/data-updates/trrs/trr_actions_responses.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9477439b3854ba0db00d228a2fd096cac5efb3cc2400204b404a594122261f43 3 | size 143033840 4 | -------------------------------------------------------------------------------- /cpdb/search_mobile/apps.py: -------------------------------------------------------------------------------- 1 | from __future__ import unicode_literals 2 | 3 | from django.apps import AppConfig 4 | 5 | 6 | class SearchMobileConfig(AppConfig): 7 | name = 'search_mobile' 8 | -------------------------------------------------------------------------------- /requirements/local.txt: -------------------------------------------------------------------------------- 1 | -r base.txt 2 | -r test.txt 3 | 4 | # imported REPL 5 | ipdb==0.13.13 6 | 7 | django-extensions==1.9.0 8 | pre-commit==0.8.0 9 | django-debug-toolbar==1.9.1 10 | -------------------------------------------------------------------------------- /cpdb/data-updates/complaints/complaints-complaints.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ae6c8f073157a63727dd7d11fd43937db6a8667a2f8267211f76cb216bb68319 3 | size 86550922 4 | -------------------------------------------------------------------------------- /cpdb/search_terms/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .search_term_category import SearchTermCategory 2 | from .search_term_item import SearchTermItem 3 | 4 | __all__ = ['SearchTermCategory', 'SearchTermItem'] 5 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/management/utils/test_export_officer_xlsx/csv/accused_8562/Beat.csv: -------------------------------------------------------------------------------- 1 | name,area_type,median_income,commander,alderman,police_hq 2 | 0823,school-grounds,,,, 3 | 2511,school-grounds,,,, 4 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_investigator_xlsx_writer/csv/investigator_1234/Beat.csv: -------------------------------------------------------------------------------- 1 | name,area_type,median_income,commander,alderman,police_hq 2 | 0823,school-grounds,,,, 3 | 2511,school-grounds,,,, 4 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/management/utils/test_export_officer_xlsx/csv/investigator_1234/Beat.csv: -------------------------------------------------------------------------------- 1 | name,area_type,median_income,commander,alderman,police_hq 2 | 0823,school-grounds,,,, 3 | 2511,school-grounds,,,, 4 | -------------------------------------------------------------------------------- /bin/coverage.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker-compose run web sh -c "cpdb/manage.py makemigrations --dry-run && python -m lambda.test && coverage run cpdb/manage.py test && coverage report && coverage html" 3 | -------------------------------------------------------------------------------- /cpdb/alias/serializers.py: -------------------------------------------------------------------------------- 1 | from rest_framework.serializers import Serializer, ListField, CharField 2 | 3 | 4 | class AliasSerializer(Serializer): 5 | aliases = ListField(child=CharField(max_length=20)) 6 | -------------------------------------------------------------------------------- /cpdb/lawsuit/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | from .lawsuit_serializer import LawsuitSerializer 2 | from .top_lawsuit_serializer import TopLawsuitSerializer 3 | 4 | __all__ = ['LawsuitSerializer', 'TopLawsuitSerializer'] 5 | -------------------------------------------------------------------------------- /.coveragerc: -------------------------------------------------------------------------------- 1 | [report] 2 | omit = 3 | */migrations/* 4 | ~/.virtualenvs/* 5 | ~/virtualenvs/* 6 | manage.py 7 | */tests/* 8 | */site-packages/* 9 | visual_token/figures.py 10 | show_missing=True 11 | -------------------------------------------------------------------------------- /cpdb/data/utils/subqueries.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | class SQCount(models.Subquery): 5 | template = "(SELECT count(*) FROM (%(subquery)s) _count)" 6 | output_field = models.IntegerField() 7 | -------------------------------------------------------------------------------- /cpdb/utils/raw_query_utils.py: -------------------------------------------------------------------------------- 1 | def dict_fetch_all(cursor): 2 | columns = [col[0] for col in cursor.description] 3 | return [ 4 | dict(zip(columns, row)) 5 | for row in cursor.fetchall() 6 | ] 7 | -------------------------------------------------------------------------------- /cpdb/document_cloud/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .document_cloud_search_query import DocumentCloudSearchQuery 2 | from .document_crawler import DocumentCrawler 3 | 4 | __all__ = ['DocumentCloudSearchQuery', 'DocumentCrawler'] 5 | -------------------------------------------------------------------------------- /cpdb/units/doc_types.py: -------------------------------------------------------------------------------- 1 | from elasticsearch_dsl import DocType, Keyword 2 | from .index_aliases import units_index_alias 3 | 4 | 5 | @units_index_alias.doc_type 6 | class UnitDocType(DocType): 7 | unit_name = Keyword() 8 | -------------------------------------------------------------------------------- /cpdb/analytics/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .event import Event 2 | from .search_tracking import SearchTracking 3 | from .attachment_tracking import AttachmentTracking 4 | 5 | __all__ = ['Event', 'SearchTracking', 'AttachmentTracking'] 6 | -------------------------------------------------------------------------------- /cpdb/status/views.py: -------------------------------------------------------------------------------- 1 | from rest_framework import viewsets 2 | from rest_framework.response import Response 3 | 4 | 5 | class StatusViewSet(viewsets.ViewSet): 6 | def list(self, request): 7 | return Response({'ok': True}) 8 | -------------------------------------------------------------------------------- /cpdb/officers/indexers/__init__.py: -------------------------------------------------------------------------------- 1 | from .officers_indexer import OfficersIndexer 2 | from .officer_coaccusals_indexer import OfficerCoaccusalsIndexer 3 | 4 | 5 | __all__ = [ 6 | 'OfficersIndexer', 'OfficerCoaccusalsIndexer' 7 | ] 8 | -------------------------------------------------------------------------------- /cpdb/data/management/commands/clear_cache.py: -------------------------------------------------------------------------------- 1 | from django.core.management import BaseCommand 2 | from django.core.cache import cache 3 | 4 | 5 | class Command(BaseCommand): 6 | def handle(self, *args, **kwargs): 7 | cache.clear() 8 | -------------------------------------------------------------------------------- /cpdb/sitemap/sitemaps/trr_sitemap.py: -------------------------------------------------------------------------------- 1 | from sitemap.sitemaps.base_sitemap import BaseSitemap 2 | from trr.models import TRR 3 | 4 | 5 | class TRRSitemap(BaseSitemap): 6 | def items(self): 7 | return TRR.objects.all().order_by('id') 8 | -------------------------------------------------------------------------------- /ansible/notebook.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: Create notebook instance 4 | hosts: all 5 | become: yes 6 | become_user: root 7 | remote_user: ansible 8 | vars_files: 9 | - env_vars/secrets.yml 10 | roles: 11 | - notebook 12 | -------------------------------------------------------------------------------- /cpdb/lawsuit/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .lawsuit import Lawsuit 2 | from .lawsuit_plaintiff import LawsuitPlaintiff 3 | from .payment import Payment 4 | 5 | __all__ = [ 6 | 'Lawsuit', 7 | 'LawsuitPlaintiff', 8 | 'Payment' 9 | ] 10 | -------------------------------------------------------------------------------- /docker/google-cloud-sdk/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM google/cloud-sdk 2 | 3 | RUN echo "deb https://dl.bintray.com/sobolevn/deb git-secret main" | tee -a /etc/apt/sources.list && \ 4 | curl https://api.bintray.com/users/sobolevn/keys/gpg/public.key | apt-key add - 5 | -------------------------------------------------------------------------------- /docker/remote_syslog2/log_files.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - /logfiles/django-error.log 3 | - /logfiles/twitterbot-webhook.log 4 | destination: 5 | host: logs7.papertrailapp.com 6 | port: 41386 7 | protocol: tls 8 | pid_file: /var/run/remote_syslog.pid 9 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [flake8] 2 | extend-ignore = W605 3 | max-line-length = 120 4 | exclude = 5 | .tox, 6 | .git, 7 | */migrations/*, 8 | */static/CACHE/*, 9 | docs, 10 | node_modules, 11 | bin, 12 | 13 | [nosetests] 14 | py3where = cpdb 15 | -------------------------------------------------------------------------------- /cpdb/pinboard/tests/models/__init__.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | from pinboard.fields import HexField 4 | 5 | 6 | class HexModel(models.Model): 7 | id = HexField(primary_key=True) 8 | nonauto_hex = HexField(auto_gen_add=False, null=True) 9 | -------------------------------------------------------------------------------- /ansible/roles/notebook/defaults/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | pyenv_root: /pyenv/ 4 | deploy_user: ansible 5 | application_name: notebook 6 | application_home: /notebook 7 | python_version: 2.7.13 8 | virtualenv_path: "{{ pyenv_root }}/versions/{{ application_name }}/" 9 | -------------------------------------------------------------------------------- /ansible/roles/notebook/files/install-python.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export PYENV_ROOT="/pyenv" 4 | export PATH="$PYENV_ROOT/bin:$PATH" 5 | 6 | if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi 7 | 8 | (pyenv versions | grep "$1") || pyenv install "$1" 9 | -------------------------------------------------------------------------------- /cpdb/config/logging_filters.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | from django.conf import settings 4 | 5 | 6 | class ContextFilter(logging.Filter): 7 | def filter(self, record): 8 | record.environment = settings.ENVIRONMENT 9 | return True 10 | -------------------------------------------------------------------------------- /docker/cpdpbot/requirements.txt: -------------------------------------------------------------------------------- 1 | gizeh==0.1.10 2 | moviepy==1.0.0 3 | requests==2.20.0 4 | azure==4.0.0 5 | tweepy==3.6.0 6 | azure-storage-queue==1.4.0 7 | mock==2.0.0 8 | robber==1.1.3 9 | tls-syslog==0.1.3 10 | imageio-ffmpeg==0.2.0 11 | imageio==2.5.0 12 | -------------------------------------------------------------------------------- /cpdb/sitemap/sitemaps/unit_sitemap.py: -------------------------------------------------------------------------------- 1 | from data.models import PoliceUnit 2 | from sitemap.sitemaps.base_sitemap import BaseSitemap 3 | 4 | 5 | class UnitSitemap(BaseSitemap): 6 | def items(self): 7 | return PoliceUnit.objects.all().order_by('unit_name') 8 | -------------------------------------------------------------------------------- /cpdb/xlsx/constants.py: -------------------------------------------------------------------------------- 1 | ACCUSED_XLSX = 'accused.xlsx' 2 | USE_OF_FORCE_XLSX = 'use_of_force.xlsx' 3 | INVESTIGATOR_XLSX = 'investigator.xlsx' 4 | DOCUMENTS_XLSX = 'documents.xlsx' 5 | XLSX_FILE_NAMES = [ACCUSED_XLSX, USE_OF_FORCE_XLSX, INVESTIGATOR_XLSX, DOCUMENTS_XLSX] 6 | -------------------------------------------------------------------------------- /apiary/app_config.md: -------------------------------------------------------------------------------- 1 | ## App config [/app-config/] 2 | 3 | ### List config [GET] 4 | 5 | + Response 200 (application/json) 6 | { 7 | "CONFIG_1": "VALUE 1", 8 | "CONFIG_2": "VALUE 2", 9 | "CONFIG_3": "VALUE 3" 10 | } 11 | -------------------------------------------------------------------------------- /cpdb/cms/tests/files/reporting.csv: -------------------------------------------------------------------------------- 1 | Link,Headline,Byline(s),Name of the publication,Date of publication,Excerpt (two paragraphs),Tags,Date Found,Officers mentioned ,Featured/starred 2 | url,title,author,publication,10/27/2015,"paragraph 1 3 | 4 | paragraph 2","tag 1, tag 2",,, 5 | -------------------------------------------------------------------------------- /cpdb/cms/utils.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | seen_keys = {} 4 | 5 | 6 | def generate_draft_block_key(): 7 | key = None 8 | 9 | while key is None or key in seen_keys: 10 | key = str(uuid.uuid4())[:5] 11 | 12 | seen_keys[key] = True 13 | return key 14 | -------------------------------------------------------------------------------- /cpdb/sitemap/sitemaps/officer_sitemap.py: -------------------------------------------------------------------------------- 1 | from data.models import Officer 2 | from sitemap.sitemaps.base_sitemap import BaseSitemap 3 | 4 | 5 | class OfficerSitemap(BaseSitemap): 6 | def items(self): 7 | return Officer.objects.all().order_by('-allegation_count') 8 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_accused_xlsx_writer/csv/empty/Allegation.csv: -------------------------------------------------------------------------------- 1 | crid,officer_name,address,old_complaint_address,incident_date,is_officer_complaint,beat,coaccused_count,category,subcategory,start_date,end_date,recc_finding,recc_outcome,final_finding,final_outcome,disciplined 2 | -------------------------------------------------------------------------------- /cpdb/activity_log/constants.py: -------------------------------------------------------------------------------- 1 | ADD_TAG_TO_DOCUMENT = 'ADD_TAG_TO_DOCUMENT' 2 | REMOVE_TAG_FROM_DOCUMENT = 'REMOVE_TAG_FROM_DOCUMENT' 3 | 4 | ACTION_TYPE_CHOICES = ( 5 | (ADD_TAG_TO_DOCUMENT, 'Add tag to document'), 6 | (REMOVE_TAG_FROM_DOCUMENT, 'Remove tag from document'), 7 | ) 8 | -------------------------------------------------------------------------------- /cpdb/sitemap/sitemaps/allegation_sitemap.py: -------------------------------------------------------------------------------- 1 | from data.models import Allegation 2 | from sitemap.sitemaps.base_sitemap import BaseSitemap 3 | 4 | 5 | class AllegationSitemap(BaseSitemap): 6 | def items(self): 7 | return Allegation.objects.all().order_by('-coaccused_count') 8 | -------------------------------------------------------------------------------- /cpdb/social_graph/queries/__init__.py: -------------------------------------------------------------------------------- 1 | from .geographic_data_query import GeographyCrsDataQuery, GeographyTrrsDataQuery 2 | from .social_graph_data_query import SocialGraphDataQuery 3 | 4 | __all__ = [ 5 | 'GeographyCrsDataQuery', 'GeographyTrrsDataQuery', 'SocialGraphDataQuery' 6 | ] 7 | -------------------------------------------------------------------------------- /cpdb/xlsx/tests/writers/test_investigator_xlsx_writer/csv/empty/Allegation.csv: -------------------------------------------------------------------------------- 1 | crid,officer_name,address,old_complaint_address,incident_date,is_officer_complaint,beat,coaccused_count,category,subcategory,start_date,end_date,recc_finding,recc_outcome,final_finding,final_outcome,disciplined 2 | -------------------------------------------------------------------------------- /apiary/officer_create_zip_file.md: -------------------------------------------------------------------------------- 1 | ## Officer create zip file [/officers/{officer_id}/create-zip-file/] 2 | 3 | ### Create zip file from excel and pdf files then save it on S3[GET] 4 | 5 | + Parameters 6 | + officer_id (number) - number ID of the officer 7 | 8 | + Response 200 (application/json) 9 | -------------------------------------------------------------------------------- /cpdb/alias/utils.py: -------------------------------------------------------------------------------- 1 | def set_aliases(doc_type_class, model_class, pk, aliases): 2 | # set db record 3 | record = model_class.objects.get(pk=pk) 4 | record.tags.set(*aliases) 5 | 6 | # update record's index 7 | document = doc_type_class.get(pk) 8 | document.update(tags=aliases) 9 | -------------------------------------------------------------------------------- /cpdb/analytics/models/event.py: -------------------------------------------------------------------------------- 1 | from django.contrib.postgres.fields import JSONField 2 | from django.db import models 3 | 4 | from data.models.common import TimeStampsModel 5 | 6 | 7 | class Event(TimeStampsModel): 8 | name = models.CharField(max_length=255) 9 | data = JSONField() 10 | -------------------------------------------------------------------------------- /cpdb/app_config/constants.py: -------------------------------------------------------------------------------- 1 | APP_CONFIG = [ 2 | { 3 | 'name': 'PINBOARD_INTRODUCTION_DELAY', 4 | 'value': '2000', 5 | 'description': 'Delay before displaying pinboard introduction in millisecond' 6 | } 7 | ] 8 | 9 | VISUAL_TOKEN_COLORS_KEY = 'VISUAL_TOKEN_COLORS' 10 | -------------------------------------------------------------------------------- /cpdb/popup/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from django.contrib.admin import ModelAdmin 3 | 4 | from popup.models import Popup 5 | 6 | 7 | class PopupAdmin(ModelAdmin): 8 | list_display = ('name', 'page', 'title', 'text') 9 | 10 | 11 | admin.site.register(Popup, PopupAdmin) 12 | -------------------------------------------------------------------------------- /cpdb/search/__init__.py: -------------------------------------------------------------------------------- 1 | from django.conf import settings 2 | 3 | from elasticsearch_dsl.connections import connections 4 | from elasticsearch import Elasticsearch 5 | 6 | 7 | es_client = Elasticsearch(hosts=settings.ELASTICSEARCH_HOSTS) 8 | 9 | connections.add_connection('default', es_client) 10 | -------------------------------------------------------------------------------- /cpdb/social_graph/serializers/officer_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from shared.serializer import OfficerPercentileSerializer 4 | 5 | 6 | class OfficerSerializer(OfficerPercentileSerializer): 7 | id = serializers.IntegerField() 8 | full_name = serializers.CharField() 9 | -------------------------------------------------------------------------------- /cpdb/config/settings/test_without_migrations.py: -------------------------------------------------------------------------------- 1 | from .test import * # NOQA 2 | 3 | 4 | class DisableMigrations(object): 5 | def __contains__(self, item): 6 | return True 7 | 8 | def __getitem__(self, item): 9 | return None 10 | 11 | 12 | MIGRATION_MODULES = DisableMigrations() 13 | -------------------------------------------------------------------------------- /cpdb/pinboard/serializers/desktop/pinned/officer_serializer.py: -------------------------------------------------------------------------------- 1 | from officers.serializers.response_serializers import PoliceUnitSerializer 2 | from ..common import OfficerSerializer as BaseOfficerSerializer 3 | 4 | 5 | class OfficerSerializer(BaseOfficerSerializer): 6 | unit = PoliceUnitSerializer(source='last_unit') 7 | -------------------------------------------------------------------------------- /cpdb/popup/tests/test_models.py: -------------------------------------------------------------------------------- 1 | from django.test.testcases import TestCase 2 | from robber.expect import expect 3 | 4 | from popup.factories import PopupFactory 5 | 6 | 7 | class PopupTestCase(TestCase): 8 | def test_str_method(self): 9 | expect(str(PopupFactory(name='some name'))).to.eq('some name') 10 | -------------------------------------------------------------------------------- /cpdb/toast/tests/test_models.py: -------------------------------------------------------------------------------- 1 | from django.test.testcases import TestCase 2 | from robber.expect import expect 3 | 4 | from toast.factories import ToastFactory 5 | 6 | 7 | class ToastTestCase(TestCase): 8 | def test_str_method(self): 9 | expect(str(ToastFactory(name='toast name'))).to.eq('toast name') 10 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | # ignore everything except cpdb, requirements and gunicorn.conf 2 | * 3 | !cpdb 4 | !requirements 5 | !lambda 6 | !gunicorn.conf 7 | 8 | # further stuffs to ignore 9 | cpdb/static 10 | cpdb/staticfiles 11 | cpdb/media 12 | cpdb/data_importer/cleaned_data 13 | cpdb/data_importer/original_data 14 | **/*.pyc 15 | -------------------------------------------------------------------------------- /ansible/roles/notebook/files/create-env.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export PYENV_ROOT="/pyenv" 4 | export PATH="$PYENV_ROOT/bin:$PATH" 5 | 6 | if which pyenv > /dev/null; then 7 | eval "$(pyenv init -)"; 8 | eval "$(pyenv virtualenv-init -)"; 9 | fi 10 | 11 | (pyenv versions | grep "$2") || pyenv virtualenv $1 $2 12 | -------------------------------------------------------------------------------- /cpdb/popup/serializers.py: -------------------------------------------------------------------------------- 1 | from rest_framework.fields import CharField 2 | from rest_framework.serializers import Serializer 3 | 4 | 5 | class PopupSerializer(Serializer): 6 | name = CharField(max_length=64) 7 | page = CharField(max_length=255) 8 | title = CharField(max_length=255) 9 | text = CharField() 10 | -------------------------------------------------------------------------------- /cpdb/pinboard/serializers/mobile/pinned/officer_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from ..common import OfficerMobileSerializer as BaseOfficerMobileSerializer 4 | 5 | 6 | class OfficerMobileSerializer(BaseOfficerMobileSerializer): 7 | complaint_count = serializers.IntegerField(source='allegation_count') 8 | -------------------------------------------------------------------------------- /cpdb/cms/tests/test_factories.py: -------------------------------------------------------------------------------- 1 | from django.test import SimpleTestCase 2 | 3 | from cms.factories import LinkEntityFactory 4 | 5 | 6 | class LinkEntityFactoryTestCase(SimpleTestCase): 7 | def test_factory(self): 8 | link_entity = LinkEntityFactory(url='url') 9 | self.assertEqual(link_entity.data['url'], 'url') 10 | -------------------------------------------------------------------------------- /cpdb/twitterbot/models/twitter_bot_visit_log.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | from data.models.common import TimeStampsModel 4 | 5 | 6 | class TwitterBotVisitLog(TimeStampsModel): 7 | response_log = models.ForeignKey('twitterbot.TwitterBotResponseLog', on_delete=models.CASCADE) 8 | request_path = models.CharField(max_length=255) 9 | -------------------------------------------------------------------------------- /cpdb/data/models/race_population.py: -------------------------------------------------------------------------------- 1 | from django.contrib.gis.db import models 2 | 3 | from .common import TimeStampsModel 4 | 5 | 6 | class RacePopulation(TimeStampsModel): 7 | race = models.CharField(max_length=255) 8 | count = models.PositiveIntegerField() 9 | area = models.ForeignKey('data.Area', on_delete=models.CASCADE) 10 | -------------------------------------------------------------------------------- /cpdb/search_mobile/serializers/lawsuit_recent_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from .lawsuit_serializer import LawsuitSerializer 4 | 5 | 6 | class LawsuitRecentSerializer(LawsuitSerializer): 7 | type = serializers.SerializerMethodField() 8 | 9 | def get_type(self, obj): 10 | return 'LAWSUIT' 11 | -------------------------------------------------------------------------------- /cpdb/alias/constants.py: -------------------------------------------------------------------------------- 1 | from data.models import Officer, Area, PoliceUnit 2 | from officers.doc_types import OfficerInfoDocType 3 | from search.doc_types import AreaDocType, UnitDocType 4 | 5 | ALIAS_MAPPINGS = { 6 | 'officer': (OfficerInfoDocType, Officer), 7 | 'area': (AreaDocType, Area), 8 | 'unit': (UnitDocType, PoliceUnit) 9 | } 10 | -------------------------------------------------------------------------------- /cpdb/es_index/management/commands/rebuild_index_daily.py: -------------------------------------------------------------------------------- 1 | from django.core.management.base import BaseCommand 2 | from django.core.management import call_command 3 | 4 | 5 | class Command(BaseCommand): 6 | def handle(self, *args, **kwargs): 7 | call_command('rebuild_index', '--daily') 8 | call_command('rebuild_search_index', '--daily') 9 | -------------------------------------------------------------------------------- /cpdb/pinboard/serializers/mobile/common/__init__.py: -------------------------------------------------------------------------------- 1 | from .officer_serializers import OfficerMobileSerializer, OfficerRowMobileSerializer 2 | from .allegation_serializer import AllegationMobileSerializer 3 | 4 | 5 | __all__ = [ 6 | 'OfficerMobileSerializer', 7 | 'OfficerRowMobileSerializer', 8 | 'AllegationMobileSerializer', 9 | ] 10 | -------------------------------------------------------------------------------- /cpdb/sitemap/sitemaps/base_sitemap.py: -------------------------------------------------------------------------------- 1 | from django.contrib.sitemaps import Sitemap 2 | 3 | 4 | class BaseSitemap(Sitemap): 5 | changefreq = 'daily' 6 | priority = 0.5 7 | protocol = 'https' 8 | 9 | def items(self): 10 | raise NotImplementedError 11 | 12 | def lastmod(self, obj): 13 | return obj.updated_at 14 | -------------------------------------------------------------------------------- /cpdb/social_graph/serializers/victim_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from shared.serializer import NoNullSerializer 4 | 5 | 6 | class VictimSerializer(NoNullSerializer): 7 | gender = serializers.CharField(source='gender_display') 8 | race = serializers.CharField() 9 | age = serializers.IntegerField() 10 | -------------------------------------------------------------------------------- /cpdb/trr/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import TRRAttachmentRequest 3 | 4 | 5 | class TRRAttachmentRequestAdmin(admin.ModelAdmin): 6 | list_display = ['__str__'] 7 | fields = readonly_fields = ('email', 'trr_id', 'created_at') 8 | 9 | 10 | admin.site.register(TRRAttachmentRequest, TRRAttachmentRequestAdmin) 11 | -------------------------------------------------------------------------------- /cpdb/twitterbot/management/commands/list_webhooks.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | from twitterbot.twitter_base_command import TwitterBaseCommand 4 | 5 | 6 | class Command(TwitterBaseCommand): 7 | def handle(self, *args, **options): 8 | webhooks = self.twitter_client.webhook.all() 9 | self.stdout.write(json.dumps(webhooks, indent=2)) 10 | -------------------------------------------------------------------------------- /cpdb/pinboard/serializers/desktop/common/__init__.py: -------------------------------------------------------------------------------- 1 | from .officer_serializers import OfficerSerializer, OfficerRowSerializer 2 | from .allegation_serializer import AllegationSerializer 3 | from .victim_serializer import VictimSerializer 4 | 5 | __all__ = [ 6 | 'OfficerSerializer', 'OfficerRowSerializer', 'AllegationSerializer', 'VictimSerializer' 7 | ] 8 | -------------------------------------------------------------------------------- /apiary/city_summary.md: -------------------------------------------------------------------------------- 1 | ## City Summary [/v2/city-summary/] 2 | 3 | ### Get city summary [GET] 4 | 5 | + Response 200 (application/json) 6 | 7 | { 8 | "allegation_count": 125735, 9 | "discipline_count": 6404, 10 | 'lawsuits_count': 1460, 11 | 'total_lawsuit_settlements': '470485665.34' 12 | } 13 | -------------------------------------------------------------------------------- /cpdb/pinboard/serializers/desktop/common/victim_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from shared.serializer import NoNullSerializer 4 | 5 | 6 | class VictimSerializer(NoNullSerializer): 7 | gender = serializers.CharField(source='gender_display') 8 | race = serializers.CharField() 9 | age = serializers.IntegerField() 10 | -------------------------------------------------------------------------------- /cpdb/app_config/serializers/visual_token_color_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from app_config.models import VisualTokenColor 4 | 5 | 6 | class VisualTokenColorSerializer(serializers.ModelSerializer): 7 | class Meta: 8 | model = VisualTokenColor 9 | fields = ('color', 'text_color', 'lower_range', 'upper_range') 10 | -------------------------------------------------------------------------------- /cpdb/sitemap/sitemaps/attachment_sitemap.py: -------------------------------------------------------------------------------- 1 | from data.constants import MEDIA_TYPE_DOCUMENT 2 | from data.models import AttachmentFile 3 | from sitemap.sitemaps.base_sitemap import BaseSitemap 4 | 5 | 6 | class AttachmentSitemap(BaseSitemap): 7 | def items(self): 8 | return AttachmentFile.objects.showing().filter(file_type=MEDIA_TYPE_DOCUMENT).order_by('id') 9 | -------------------------------------------------------------------------------- /cpdb/twitterbot/models/respone_template.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | from twitterbot.constants import RESPONSE_TYPE_CHOICES 4 | from data.models.common import TimeStampsModel 5 | 6 | 7 | class ResponseTemplate(TimeStampsModel): 8 | response_type = models.CharField(max_length=20, choices=RESPONSE_TYPE_CHOICES) 9 | syntax = models.TextField() 10 | -------------------------------------------------------------------------------- /requirements/test.txt: -------------------------------------------------------------------------------- 1 | -r base.txt 2 | -r ../lambda/create_officer_zip/requirements.txt 3 | -r ../lambda/upload_pdf/requirements.txt 4 | 5 | flake8==3.7.9 6 | coverage==5.0.4 7 | coveralls==2.0.0 8 | factory-boy==2.11.1 9 | freezegun==0.3.13 10 | mock==2.0.0 11 | robber==1.1.5 12 | responses==0.10.5 13 | xlsx2csv==0.7.4 14 | moto==1.3.2 15 | botocore==1.13.42 16 | -------------------------------------------------------------------------------- /cpdb/search_mobile/serializers/trr_recent_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from shared.serializer import NoNullSerializer 4 | 5 | 6 | class TRRRecentSerializer(NoNullSerializer): 7 | id = serializers.IntegerField() 8 | type = serializers.SerializerMethodField() 9 | 10 | def get_type(self, obj): 11 | return 'TRR' 12 | -------------------------------------------------------------------------------- /cpdb/xlsx/serializers/victim_xlsx_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework.serializers import Serializer, CharField, IntegerField 2 | 3 | 4 | class VictimXlsxSerializer(Serializer): 5 | crid = CharField(source='allegation.crid') 6 | gender = CharField(source='gender_display', allow_blank=True) 7 | race = CharField() 8 | birth_year = IntegerField(allow_null=True) 9 | -------------------------------------------------------------------------------- /cpdb/cms/models/slug_page.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.contrib.postgres.fields import JSONField 3 | 4 | from data.models.common import TimeStampsModel 5 | 6 | 7 | class SlugPage(TimeStampsModel): 8 | slug = models.CharField(max_length=255, primary_key=True) 9 | serializer_class = models.CharField(max_length=255) 10 | fields = JSONField() 11 | -------------------------------------------------------------------------------- /cpdb/pinboard/serializers/mobile/relevant/officer_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from ..common import OfficerMobileSerializer as BaseOfficerMobileSerializer 4 | 5 | 6 | class OfficerMobileSerializer(BaseOfficerMobileSerializer): 7 | allegation_count = serializers.IntegerField() 8 | coaccusal_count = serializers.IntegerField(allow_null=True) 9 | -------------------------------------------------------------------------------- /cpdb/sitemap/sitemaps/static_page_sitemap.py: -------------------------------------------------------------------------------- 1 | from sitemap.sitemaps.base_sitemap import BaseSitemap 2 | 3 | 4 | class StaticPageSiteMap(BaseSitemap): 5 | def items(self): 6 | return ['', 'collaborate', 'terms'] 7 | 8 | def location(self, item): 9 | return f'/{item}/' if item else '' 10 | 11 | def lastmod(self, obj): 12 | return None 13 | -------------------------------------------------------------------------------- /cpdb/twitterbot/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .respone_template import ResponseTemplate 2 | from .tweet_response_round_robin import TweetResponseRoundRobin 3 | from .twitter_bot_response_log import TwitterBotResponseLog 4 | from .twitter_bot_visit_log import TwitterBotVisitLog 5 | 6 | __all__ = ['ResponseTemplate', 'TweetResponseRoundRobin', 'TwitterBotResponseLog', 'TwitterBotVisitLog'] 7 | -------------------------------------------------------------------------------- /docker/postgres/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mdillon/postgis:9.6-alpine 2 | 3 | USER $POSTGRES_USER 4 | 5 | ENV POSTGRES_APP_DB cpdb 6 | ENV POSTGRES_APP_USER cpdb 7 | ENV POSTGRES_APP_PASSWORD password 8 | ENV POSTGRES_NUMERACY_PASSWORD numeracy 9 | ENV POSTGRES_NOTEBOOK_PASSWORD notebook 10 | ENV POSTGRES_CIVIS_PASSWORD civis 11 | 12 | COPY init-scripts/* /docker-entrypoint-initdb.d/ 13 | -------------------------------------------------------------------------------- /cpdb/data/models/attachment_ocr.py: -------------------------------------------------------------------------------- 1 | from django.contrib.gis.db import models 2 | 3 | from .common import TimeStampsModel 4 | 5 | 6 | class AttachmentOCR(TimeStampsModel): 7 | attachment = models.ForeignKey('data.AttachmentFile', on_delete=models.CASCADE, related_name='attachment_ocrs') 8 | page_num = models.IntegerField() 9 | ocr_text = models.TextField(blank=True) 10 | -------------------------------------------------------------------------------- /cpdb/data/templates/attachment_changelist.html: -------------------------------------------------------------------------------- 1 | {% extends 'admin/change_list.html' %} 2 | 3 | {% block object-tools %} 4 |