├── .codeclimate.yml ├── .coveragerc ├── .cspell.json ├── .dockerignore ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .github ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md ├── SEED_Contribution_Proposal_v1.1_2022-12-05.docx ├── dependabot.yml ├── release.yml └── workflows │ ├── ci.yml │ ├── pr-labels.yml │ └── publish.yml ├── .gitignore ├── .gitmodules ├── .pre-commit-config.yaml ├── .prettierignore ├── .prettierrc ├── .spelling.dic ├── .stylelintrc.js ├── AUTHORS.md ├── CHANGELOG.md ├── Dockerfile ├── Dockerfile-dev ├── Dockerfile.ecs ├── LICENSE.md ├── README.md ├── bin ├── apitest_start_server.sh ├── backup_database.sh ├── drop_create_db.sh ├── setup_database.sh ├── start-seed.sh ├── start_celery.sh └── start_uwsgi.sh ├── config ├── __init__.py ├── settings │ ├── __init__.py │ ├── common.py │ ├── dev.py │ ├── docker.py │ ├── docker_dev.py │ ├── local_untracked.py.dist │ ├── test.py │ └── test_local_untracked.py ├── template_context.py ├── tests │ ├── __init__.py │ ├── test_commands.py │ └── test_views.py ├── urls.py ├── utils.py ├── views.py └── wsgi.py ├── deploy.sh ├── docker-compose.build.yml ├── docker-compose.dev.yml ├── docker-compose.local.yml ├── docker-compose.pgupgrade.yml ├── docker-compose.yml ├── docker ├── README.md ├── backup_database.sh ├── backup_k8s │ ├── Dockerfile │ ├── backup_database.sh │ └── tar_backup_database.sh ├── dump_database.sh ├── maintenance.html ├── maintenance.sh ├── nginx │ ├── nginx.conf.template │ ├── seed-csp.conf │ ├── seed-security-headers.conf │ └── seed-uwsgi.conf ├── postgres_upgrade.sh ├── restore_database.sh ├── seed-entrypoint.sh ├── start_celery_docker.sh ├── start_uwsgi_docker.sh ├── supervisor-seed.conf ├── uwsgi.ini └── wait-for-it.sh ├── docs └── source │ ├── api.rst │ ├── aws.rst │ ├── buildingsync.rst │ ├── conf.py │ ├── data_model.rst │ ├── data_quality.rst │ ├── deployment.rst │ ├── developer_resources.rst │ ├── docker.rst │ ├── faq.rst │ ├── getting_started.rst │ ├── help.rst │ ├── images │ ├── case-a.webp │ ├── case-abcd.webp │ ├── case-b.webp │ ├── case-c.webp │ ├── case-d.webp │ └── data-model.webp │ ├── index.rst │ ├── kubernetes_deployment.rst │ ├── license.rst │ ├── linux.rst │ ├── mapping.rst │ ├── matching.rst │ ├── migrations.rst │ ├── modules.rst │ ├── modules │ ├── config.rst │ ├── seed.cleansing.rst │ ├── seed.data.rst │ ├── seed.data_importer.rst │ ├── seed.features.rst │ ├── seed.landing.management.commands.rst │ ├── seed.landing.management.rst │ ├── seed.landing.rst │ ├── seed.lib.mappings.rst │ ├── seed.lib.merging.rst │ ├── seed.lib.rst │ ├── seed.management.rst │ ├── seed.managers.rst │ ├── seed.managers.tests.rst │ ├── seed.mappings.rst │ ├── seed.models.rst │ ├── seed.public.rst │ ├── seed.rst │ ├── seed.serializers.rst │ ├── seed.templatetags.rst │ ├── seed.test_helpers.factory.lib.rst │ ├── seed.test_helpers.factory.rst │ ├── seed.test_helpers.rst │ ├── seed.tests.functional.rst │ ├── seed.tests.rst │ ├── seed.urls.rst │ ├── seed.utils.rst │ └── seed.views.rst │ ├── postgres_upgrade.rst │ ├── setup_docker.rst │ ├── setup_osx.rst │ └── translation.rst ├── locale ├── en_US │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── es │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po └── fr_CA │ └── LC_MESSAGES │ ├── django.mo │ └── django.po ├── log └── .gitkeep ├── lokalise.yml.example ├── manage.py ├── mypy.ini ├── ng_seed ├── README.md ├── __init__.py └── views.py ├── package-lock.json ├── package.json ├── pytest.ini ├── requirements.txt ├── requirements ├── aws.txt ├── base.txt ├── local.txt └── test.txt ├── ruff.toml ├── script ├── get_angular_translations.sh └── get_python_translations.sh ├── seed ├── __init__.py ├── admin.py ├── analysis_pipelines │ ├── __init__.py │ ├── better │ │ ├── __init__.py │ │ ├── buildingsync.py │ │ ├── client.py │ │ ├── helpers.py │ │ └── pipeline.py │ ├── bsyncr.py │ ├── co2.py │ ├── eeej.py │ ├── element_statistics.py │ ├── eui.py │ ├── pipeline.py │ ├── tasks.py │ ├── upgrade_recommendation.py │ └── utils.py ├── api │ ├── __init__.py │ ├── base │ │ ├── __init__.py │ │ └── urls.py │ ├── v3 │ │ ├── __init__.py │ │ └── urls.py │ └── v4 │ │ ├── __init__.py │ │ └── urls.py ├── audit_template │ ├── __init__.py │ └── audit_template.py ├── authentication.py ├── building_sync │ ├── __init__.py │ ├── building_sync.py │ ├── enumerations │ │ ├── enumerations_v1_0_0.json │ │ └── enumerations_v2_6_0.json │ ├── lib │ │ ├── __init__.py │ │ └── enumerations.json │ ├── mappings.py │ ├── schemas │ │ ├── BuildingSync_v2_0.xsd │ │ ├── BuildingSync_v2_0_0.xsd │ │ ├── BuildingSync_v2_1_0.xsd │ │ ├── BuildingSync_v2_2_0.xsd │ │ ├── BuildingSync_v2_3_0.xsd │ │ ├── BuildingSync_v2_4_0.xsd │ │ └── BuildingSync_v2_6_0.xsd │ ├── tests │ │ ├── __init__.py │ │ ├── data │ │ │ ├── ExportedData.xlsx │ │ │ ├── buildingsync_ATT_export.xml │ │ │ ├── buildingsync_ex01_measures.xml │ │ │ ├── buildingsync_ex01_measures_bad_names.xml │ │ │ ├── buildingsync_v2_0_bricr_workflow.xml │ │ │ ├── ex1_no_schemaLocation_and_ex_1.zip │ │ │ ├── ex_1.xml │ │ │ ├── ex_1_and_buildingsync_ex01_measures.zip │ │ │ ├── ex_1_different_namespace.xml │ │ │ ├── ex_1_no_lat_long.xml │ │ │ ├── ex_1_no_schemaLocation.xml │ │ │ ├── ex_1_no_street_address.xml │ │ │ ├── ex_1_v2.6.0.xml │ │ │ ├── example_SF_audit_report_BS_v2.3_081321.xml │ │ │ └── test_single_scenario.xml │ │ ├── test_buildingsync.py │ │ ├── test_buildingsync_views.py │ │ ├── test_mappings.py │ │ └── test_validation_client.py │ └── validation_client.py ├── celery.py ├── context_processors.py ├── data_importer │ ├── __init__.py │ ├── access_level_instances_parser.py │ ├── equivalence_partitioner.py │ ├── managers.py │ ├── match.py │ ├── meters_parser.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20160218_1335.py │ │ ├── 0002_auto_20160302_1142.py │ │ ├── 0003_merge.py │ │ ├── 0004_auto_20160411_1139.py │ │ ├── 0005_importfile_cycle.py │ │ ├── 0006_auto_20161007_0317.py │ │ ├── 0007_auto_20161008_2244.py │ │ ├── 0008_importfile_cached_mapped_columns.py │ │ ├── 0009_importfile_uploaded_filename.py │ │ ├── 0010_importfile_matching_results_data.py │ │ ├── 0011_auto_20180725_0825.py │ │ ├── 0012_auto_20181107_0904.py │ │ ├── 0013_importfile_raw_property_state_to_filename.py │ │ ├── 0014_importfile_has_generated_headers.py │ │ ├── 0015_auto_20210712_2134.py │ │ ├── 0016_auto_20220119_1347.py │ │ ├── 0017_pm_source_type.py │ │ ├── 0018_importfile_multiple_cycle_upload.py │ │ ├── 0019_accountability_hierarchy.py │ │ └── __init__.py │ ├── models.py │ ├── sensor_readings_parser.py │ ├── tasks.py │ ├── tests │ │ ├── __init__.py │ │ ├── data │ │ │ ├── MultiCycle_Test.xlsx │ │ │ ├── example-GreenButton-data-1002-1-dup.xml │ │ │ ├── example-GreenButton-data.xml │ │ │ ├── example-data-properties-2-invalid-footprints.xlsx │ │ │ ├── example-data-properties-duplicate-headers.xlsx │ │ │ ├── example-data-properties-duplicates.xlsx │ │ │ ├── example-data-properties-missing-headers.xlsx │ │ │ ├── example-data-properties-postal.xlsx │ │ │ ├── example-data-properties-small-changes.xlsx │ │ │ ├── example-data-properties-unicode.xlsx │ │ │ ├── example-data-properties.xlsx │ │ │ ├── example-data-taxlots-1-invalid-footprint.xlsx │ │ │ ├── example-data-taxlots-2-invalid-footprints.xlsx │ │ │ ├── example-data-taxlots-small-changes.xlsx │ │ │ ├── example-data-taxlots.xlsx │ │ │ ├── example-pm-data-request-with-meters-new-format.xlsx │ │ │ ├── example-pm-data-request-with-meters.xlsx │ │ │ ├── example-pm-monthly-meter-usage-1-dup.xlsx │ │ │ ├── example-pm-monthly-meter-usage-2-cost-meters.xlsx │ │ │ ├── example-pm-monthly-meter-usage-with-unknown-types-and-units.xlsx │ │ │ ├── example-pm-monthly-meter-usage.xlsx │ │ │ ├── example-pm-properties.xlsx │ │ │ └── mappings │ │ │ │ └── example-data-properties.csv │ │ ├── integration │ │ │ ├── __init__.py │ │ │ ├── test_case_a.py │ │ │ ├── test_case_b.py │ │ │ ├── test_data_import.py │ │ │ ├── test_demo_v2.py │ │ │ ├── test_equivalence_partioner_with_file.py │ │ │ ├── test_footprints_import.py │ │ │ ├── test_matching.py │ │ │ ├── test_merge_duplicate_rows.py │ │ │ ├── test_properties.py │ │ │ └── test_tax_lots.py │ │ ├── test_ah_import.py │ │ ├── test_cleaner.py │ │ ├── test_equivalence_partitioner.py │ │ ├── test_link_incoming.py │ │ ├── test_mapping.py │ │ ├── test_match_incoming.py │ │ ├── test_match_unicode.py │ │ ├── test_meters_parser.py │ │ └── util.py │ └── utils.py ├── decorators.py ├── docs │ ├── faq │ │ ├── features │ │ │ ├── get-general-info.md │ │ │ ├── irregular-data-updates.md │ │ │ ├── linking-intro.md │ │ │ ├── linking-paired-properties.md │ │ │ ├── map-merge-link.md │ │ │ ├── verify-geocode.md │ │ │ └── when-geocode.md │ │ ├── general │ │ │ └── resources.md │ │ ├── hosting │ │ │ ├── estimated-cost.md │ │ │ └── local-network.md │ │ ├── industry involvement │ │ │ ├── building-construction-permits.md │ │ │ └── plugins.md │ │ └── security │ │ │ ├── encryption.md │ │ │ └── ssl.md │ ├── static │ │ └── docs │ │ │ ├── images │ │ │ └── mapping_diagram.webp │ │ │ └── js │ │ │ └── faq.js │ ├── templates │ │ └── docs │ │ │ └── faq.html │ ├── urls.py │ └── views.py ├── exception_handler.py ├── filters.py ├── filtersets.py ├── hpxml │ ├── __init__.py │ ├── hpxml.py │ ├── schemas │ │ ├── BaseElements.xsd │ │ ├── HPXML.xsd │ │ ├── HPXMLDataTypes.xsd │ │ └── blank.xml │ └── tests │ │ ├── __init__.py │ │ ├── data │ │ └── audit.xml │ │ ├── test_hpxml.py │ │ └── test_hpxml_views.py ├── landing │ ├── __init__.py │ ├── forms.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20151105_1539.py │ │ ├── 0003_seeduser_default_building_detail_custom_columns.py │ │ ├── 0004_auto_20160218_1335.py │ │ ├── 0004_auto_20160316_1102.py │ │ ├── 0005_merge.py │ │ ├── 0006_auto_20170602_1648.py │ │ ├── 0007_auto_20181107_0904.py │ │ ├── 0008_seeduser_prompt_2fa.py │ │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── static │ │ └── landing │ │ │ ├── images │ │ │ └── landing │ │ │ │ ├── bg-paper.webp │ │ │ │ └── landing-bg.webp │ │ │ └── scss │ │ │ └── landing.scss │ ├── templates │ │ ├── landing │ │ │ ├── _marketing_bullets.html │ │ │ ├── _password_note.html │ │ │ ├── account_activation_invalid.html │ │ │ ├── account_activation_sent.html │ │ │ ├── base.html │ │ │ ├── create_account.html │ │ │ ├── home.html │ │ │ ├── password_reset.html │ │ │ ├── password_reset_complete.html │ │ │ ├── password_reset_confirm.html │ │ │ ├── password_reset_done.html │ │ │ ├── password_reset_email.html │ │ │ ├── password_reset_forced_email.html │ │ │ ├── password_reset_subject.txt │ │ │ ├── password_set.html │ │ │ ├── signup.html │ │ │ └── thank_you.html │ │ └── two_factor │ │ │ ├── _base.html │ │ │ ├── _base_focus.html │ │ │ ├── _wizard_actions.html │ │ │ ├── _wizard_forms.html │ │ │ ├── core │ │ │ ├── backup_tokens.html │ │ │ ├── login.html │ │ │ ├── otp_required.html │ │ │ ├── phone_register.html │ │ │ ├── setup.html │ │ │ └── setup_complete.html │ │ │ ├── profile │ │ │ ├── disable.html │ │ │ └── profile.html │ │ │ └── twilio │ │ │ └── sms_message.html │ ├── tests.py │ ├── urls.py │ └── views.py ├── lib │ ├── __init__.py │ ├── geospatial │ │ ├── __init__.py │ │ ├── data │ │ │ ├── Multifamily_Properties_-_Assisted.csv.xz │ │ │ ├── Public_Housing_Developments.csv.xz │ │ │ ├── cejst-1.0-communities.csv.xz │ │ │ ├── test-Multifamily_Properties_-_Assisted.csv.xz │ │ │ ├── test-Public_Housing_Developments.csv.xz │ │ │ └── test-cejst-1.0-communities.csv.xz │ │ └── eeej.py │ ├── mappings │ │ ├── __init__.py │ │ ├── data │ │ │ ├── __init__.py │ │ │ ├── bedes.py │ │ │ ├── pm-mapping.json │ │ │ └── process.py │ │ ├── mapper.py │ │ ├── mapping_columns.py │ │ └── test.py │ ├── mcm │ │ ├── .gitignore │ │ ├── __init__.py │ │ ├── cleaners.py │ │ ├── data │ │ │ ├── SEED │ │ │ │ └── __init__.py │ │ │ └── __init__.py │ │ ├── mapper.py │ │ ├── matchers.py │ │ ├── reader.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_data │ │ │ │ ├── example_feature_collection_geojson.json │ │ │ │ ├── greenbutton │ │ │ │ │ ├── example-GreenButton-data-electricity-wh.xml │ │ │ │ │ ├── example-GreenButton-data-gas-J--3.xml │ │ │ │ │ ├── example-GreenButton-data-gas-MBtu.xml │ │ │ │ │ ├── example-GreenButton-data-gas-therms--3.xml │ │ │ │ │ ├── example-GreenButton-data-invalid-electricity-cf.xml │ │ │ │ │ └── example-GreenButton-data-invalid-time-service-kind.xml │ │ │ │ ├── test_csv.csv │ │ │ │ ├── test_espm.csv │ │ │ │ ├── test_espm.xls │ │ │ │ ├── test_espm.xlsx │ │ │ │ ├── test_espm_blank_rows.xls │ │ │ │ ├── test_espm_date_format.xlsx │ │ │ │ └── test_missing_headers.csv │ │ │ ├── test_mcm_parser.py │ │ │ ├── test_reader_greenbuttonparser.py │ │ │ └── test_reader_jsonparser.py │ │ └── utils.py │ ├── merging │ │ ├── __init__.py │ │ ├── merging.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ └── test_merging.py │ ├── progress_data │ │ ├── __init__.py │ │ ├── progress_data.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ └── test_progress_data.py │ ├── superperms │ │ ├── __init__.py │ │ ├── orgs │ │ │ ├── __init__.py │ │ │ ├── decorators.py │ │ │ ├── exceptions.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20160321_1138.py │ │ │ │ ├── 0003_auto_20160412_1123.py │ │ │ │ ├── 0004_auto_20171120_1158.py │ │ │ │ ├── 0004_auto_20180106_2123.py │ │ │ │ ├── 0005_merge_20180110_1156.py │ │ │ │ ├── 0006_organization_display_significant_figures.py │ │ │ │ ├── 0007_auto_20181107_0904.py │ │ │ │ ├── 0008_organization_mapquest_api_key.py │ │ │ │ ├── 0009_organization_meter_related_options.py │ │ │ │ ├── 0010_auto_20190616_1351.py │ │ │ │ ├── 0011_auto_20190714_2159.py │ │ │ │ ├── 0012_auto_20200327_1213.py │ │ │ │ ├── 0013_organization_comstock_enabled.py │ │ │ │ ├── 0014_organization_geocoding_enabled.py │ │ │ │ ├── 0015_organization_property_display_field.py │ │ │ │ ├── 0016_organization_taxlot_display_field.py │ │ │ │ ├── 0017_auto_20210218_1715.py │ │ │ │ ├── 0018_update_organization_display_meter_units.py │ │ │ │ ├── 0019_organization_better_analysis_api_key.py │ │ │ │ ├── 0020_rename_display_significant_figures_organization_display_decimal_places.py │ │ │ │ ├── 0021_auto_20220622_2125.py │ │ │ │ ├── 0022_auto_20220711_1928.py │ │ │ │ ├── 0023_auto_20220721_1851.py │ │ │ │ ├── 0024_salesforce_configurations.py │ │ │ │ ├── 0025_remove_duplicate_users_for_org.py │ │ │ │ ├── 0026_organizationuser_unique_user_for_organization.py │ │ │ │ ├── 0027_organization_ubid_threshold.py │ │ │ │ ├── 0028_organization_audit_template_report_type.py │ │ │ │ ├── 0029_auto_20240105_1257.py │ │ │ │ ├── 0030_accountability_hierarchy.py │ │ │ │ ├── 0031_encrypt_existing_audit_template_passwords.py │ │ │ │ ├── 0032_organization_public_feed.py │ │ │ │ ├── 0033_organization_public_geojson_enabled.py │ │ │ │ ├── 0034_org_audit_template_fields.py │ │ │ │ ├── 0035_organization_require_2fa.py │ │ │ │ ├── 0036_organization_display_meter_water_units.py │ │ │ │ ├── 0037_organization_display_water_units.py │ │ │ │ ├── 0038_alter_organization_audit_template_status_type.py │ │ │ │ ├── 0039_alter_organization_ubid_threshold.py │ │ │ │ ├── 0040_add_at_export_configs.py │ │ │ │ ├── 0041_add_at_tracking_fields.py │ │ │ │ ├── 0042_organizationuser_settings.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ └── permissions.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── test_organization_access_levels.py │ │ │ └── test_organizations.py │ ├── tkbl │ │ └── tkbl.py │ ├── uniformat │ │ └── uniformat.py │ ├── util.py │ └── xml_mapping │ │ ├── __init__.py │ │ ├── mapper.py │ │ └── reader.py ├── management │ ├── __init__.py │ └── commands │ │ ├── __init__.py │ │ ├── add_eeej_datasources.py │ │ ├── add_mapping_profile.py │ │ ├── add_member_to_org.py │ │ ├── create_and_load_sample_data.py │ │ ├── create_default_columns.py │ │ ├── create_default_user.py │ │ ├── create_geojson_mock_data.py │ │ ├── create_sample_csv.py │ │ ├── create_suborg_user.py │ │ ├── create_test_user_json.py │ │ ├── delete_unused_uploaded_files.py │ │ ├── flush_db.py │ │ ├── make_superuser.py │ │ ├── rehash.py │ │ └── remove_superuser.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_buildingsnapshot_duplicate.py │ ├── 0003_auto_20151105_1539.py │ ├── 0004_auto_20151201_1404.py │ ├── 0004_noncanonicalprojectbuildings.py │ ├── 0005_auto_20151201_1510.py │ ├── 0006_canonicalbuilding_labels.py │ ├── 0007_auto_20151201_1515.py │ ├── 0008_remove_projectbuilding_status_label.py │ ├── 0009_merge.py │ ├── 0010_auto_20151204_1337.py │ ├── 0011_auto_20151209_0821.py │ ├── 0012_auto_20151222_1031.py │ ├── 0013_auto_20160218_1335.py │ ├── 0013_auto_20160225_1213.py │ ├── 0014_auto_20160308_1106.py │ ├── 0015_merge.py │ ├── 0016_auto_20160411_1139.py │ ├── 0017_auto_20160602_1436.py │ ├── 0017_column_extra_data_source.py │ ├── 0018_auto_20160609_0841.py │ ├── 0018_auto_20160614_1330.py │ ├── 0019_merge.py │ ├── 0020_auto_20160725_1033.py │ ├── 0021_auto_20160727_1347.py │ ├── 0021_auto_20160818_1016.py │ ├── 0021_propertyauditlog_taxlotauditlog.py │ ├── 0022_merge.py │ ├── 0022_propertystate_data_state.py │ ├── 0023_auto_20160817_0901.py │ ├── 0023_auto_20160822_2100.py │ ├── 0024_auto_20160822_2107.py │ ├── 0024_merge.py │ ├── 0025_auto_20160822_2108.py │ ├── 0026_auto_20160822_2109.py │ ├── 0027_auto_20160822_2143.py │ ├── 0028_auto_20160824_1642.py │ ├── 0029_merge.py │ ├── 0030_column_table_name.py │ ├── 0031_auto_20160912_1155.py │ ├── 0031_auto_20160913_0001.py │ ├── 0032_auto_20160916_1212.py │ ├── 0032_migrate_label_data.py │ ├── 0033_merge.py │ ├── 0034_merge.py │ ├── 0035_auto_20161005_0238.py │ ├── 0036_auto_20161006_0722.py │ ├── 0037_auto_20161006_1744.py │ ├── 0038_auto_20161008_2244.py │ ├── 0039_auto_20161013_1536.py │ ├── 0040_auto_20161014_1839.py │ ├── 0041_auto_20161014_1908.py │ ├── 0042_auto_20161015_0611.py │ ├── 0043_auto_20161025_1033.py │ ├── 0044_propertystate_property_type.py │ ├── 0045_auto_20170112_1233.py │ ├── 0046_auto_20170118_1348.py │ ├── 0047_auto_20170119_1318.py │ ├── 0048_auto_20170219_1214.py │ ├── 0049_auto_20170222_1217.py │ ├── 0050_clean_auditlogs.py │ ├── 0051_auto_20170307_0954.py │ ├── 0052_auto_20170307_0955.py │ ├── 0053_auto_20170320_1159.py │ ├── 0054_remove_same_column_in_mappings.py │ ├── 0055_split_multiple_mappings.py │ ├── 0056_cleanup_columns.py │ ├── 0057_remove_column_extra_data_source.py │ ├── 0058_auto_20170403_1149.py │ ├── 0059_auto_20170407_1516.py │ ├── 0060_column_import_file.py │ ├── 0061_dataqualitycheck_rule.py │ ├── 0062_auto_20170510_1525.py │ ├── 0063_rule_text_match.py │ ├── 0064_auto_20170516_1155.py │ ├── 0065_auto_20170518_0854.py │ ├── 0066_auto_20170522_1252.py │ ├── 0067_auto_20170602_0740.py │ ├── 0068_auto_20170614_1150.py │ ├── 0068_green_assessments.py │ ├── 0069_auto_20170614_1430.py │ ├── 0070_merge.py │ ├── 0071_auto_20170721_1203.py │ ├── 0072_auto_20170908_1521.py │ ├── 0072_auto_20170918_0850.py │ ├── 0073_column_units_pint.py │ ├── 0074_merge.py │ ├── 0075_auto_20171017_0837.py │ ├── 0076_auto_20171018_1238.py │ ├── 0077_auto_20171201_1323.py │ ├── 0078_auto_20171214_0846.py │ ├── 0079_propertystate_ubid.py │ ├── 0080_auto_20180107_0808.py │ ├── 0080_column_shared_field_type.py │ ├── 0081_merge_20180109_0747.py │ ├── 0082_auto_20180119_1021.py │ ├── 0082_propertystate_source_eui_modeled_pint.py │ ├── 0083_rename_propertystate_to_orig.py │ ├── 0084_copy_propertystate_orig_pint.py │ ├── 0085_rename_propertystate_from_pint.py │ ├── 0086_auto_20180111_1531.py │ ├── 0087_merge_20180123_1033.py │ ├── 0088_auto_20180423_0933.py │ ├── 0089_auto_20180508_1243.py │ ├── 0090_auto_20180508_1243.py │ ├── 0091_auto_20180725_2039.py │ ├── 0092_add_hash_object_data.py │ ├── 0093_auto_20180817_1112.py │ ├── 0094_column_merge_protection.py │ ├── 0095_auto_20180920_1819.py │ ├── 0096_auto_20181107_0904.py │ ├── 0097_auto_20181107_1231.py │ ├── 0098_auto_20181121_1302.py │ ├── 0099_auto_20190214_1259.py │ ├── 0100_auto_20190228_1239.py │ ├── 0101_auto_20190318_1835.py │ ├── 0102_auto_20190503_1251.py │ ├── 0103_auto_20190505_0731.py │ ├── 0104_auto_20190509_1854.py │ ├── 0105_auto_20190613_1251.py │ ├── 0105_auto_20190702_1400.py │ ├── 0106_meter_scenario_id.py │ ├── 0107_auto_20190709_2058.py │ ├── 0108_merge_20190716_1038.py │ ├── 0109_auto_20190724_1251.py │ ├── 0110_matching_criteria.py │ ├── 0111_rehash.py │ ├── 0112_refresh_matching_criteria.py │ ├── 0113_column_geocoding_order.py │ ├── 0114_auto_20191211_0958.py │ ├── 0115_rehash_postal_code.py │ ├── 0116_auto_20191219_1606.py │ ├── 0117_columnmappingpreset.py │ ├── 0118_match_merge_link_all_orgs.py │ ├── 0119_column_recognize_empty.py │ ├── 0120_created_updated_col_objects.py │ ├── 0121_update_updated_timestamps.py │ ├── 0122_auto_20200303_1428.py │ ├── 0123_auto_20200324_1424.py │ ├── 0124_auto_20200323_1509.py │ ├── 0125_dq_refactor.py │ ├── 0126_columnmappingpreset_preset_type.py │ ├── 0127_auto_20200605_1125.py │ ├── 0128_auto_20200810_1731.py │ ├── 0128_auto_20210119_1238.py │ ├── 0129_auto_20200828_0610.py │ ├── 0130_auto_20200924_1337.py │ ├── 0131_analysis_analysisinputfile_analysismessage_analysisoutputfile_analysispropertyview.py │ ├── 0132_auto_20201211_1949_squashed_0134_auto_20201211_2053.py │ ├── 0133_auto_20201216_2035.py │ ├── 0134_auto_20201217_2236.py │ ├── 0135_auto_20210112_2306.py │ ├── 0136_merge_20210120_0944.py │ ├── 0137_statuslabel_show_in_list.py │ ├── 0138_auto_20210512_0024.py │ ├── 0139_auto_20210524_1016.py │ ├── 0140_postofficeemail_postofficeemailtemplate.py │ ├── 0140_scenario_annual_peak_electricity_reduction.py │ ├── 0141_auto_20210611_0539.py │ ├── 0141_propertymeasure_useful_life.py │ ├── 0142_columnlistprofile_derived_columns.py │ ├── 0142_merge_20210611_0610.py │ ├── 0143_auto_20210614_2058.py │ ├── 0144_merge_20210615_1322.py │ ├── 0145_merge_20210621_0716.py │ ├── 0145_rule_for_derived_column.py │ ├── 0146_merge_20210622_2054.py │ ├── 0147_rename_bsync_col_mapping_preset.py │ ├── 0148_auto_20210712_2134.py │ ├── 0149_auto_20210922_1740.py │ ├── 0150_auto_20210922_1909.py │ ├── 0151_seeduser_20210923_1337.py │ ├── 0152_seed_renameeuicol_20211004_1337.py │ ├── 0153_auto_20211012_2202.py │ ├── 0154_analysis_created_at.py │ ├── 0155_propertystate_egrid_subregion_code.py │ ├── 0156_auto_20211104_1638.py │ ├── 0157_sensor.py │ ├── 0158_sensorreading.py │ ├── 0159_auto_20220310_1648.py │ ├── 0159_inventorydocument.py │ ├── 0160_merge_0159_auto_20220310_1648_0159_inventorydocument.py │ ├── 0161_alter_inventorydocument_file_type.py │ ├── 0162_auto_20220418_2257.py │ ├── 0163_add_bae_assets_to_buildingsync_default_profile.py │ ├── 0164_auto_20220510_2008.py │ ├── 0165_column_column_description.py │ ├── 0166_propertystate_property_timezone.py │ ├── 0167_auto_20220608_0759.py │ ├── 0168_datalogger_identifier.py │ ├── 0169_auto_20220616_1028.py │ ├── 0170_column_derived_column.py │ ├── 0171_auto_20220628_2059.py │ ├── 0172_update_at_building_id_target.py │ ├── 0173_update_bae_assets.py │ ├── 0174_fix_ghg_columns.py │ ├── 0175_filtergroup.py │ ├── 0176_dataview_dataviewparameter.py │ ├── 0177_compliance_metric.py │ ├── 0178_compliance_metric_type_not_required.py │ ├── 0179_auto_20220916_0927.py │ ├── 0180_remove_property_campus.py │ ├── 0181_auto_20221202_0827.py │ ├── 0182_alter_meter_source.py │ ├── 0183_auto_20221216_1221.py │ ├── 0184_alter_meter_type.py │ ├── 0185_auto_20230112_0922.py │ ├── 0186_salesforce_configs.py │ ├── 0187_update_compliance_metric_cycles.py │ ├── 0188_auto_20230217_1652.py │ ├── 0189_backfill_events.py │ ├── 0190_auto_20230324_1451.py │ ├── 0191_add_data_admin_to_sf.py │ ├── 0192_sf_default_account_fields.py │ ├── 0193_remove_null_taxlot_views.py │ ├── 0194_alter_taxlotview_taxlot.py │ ├── 0195_sf_delete_label_checkbox.py │ ├── 0196_alter_source_types.py │ ├── 0197_pm_source_type.py │ ├── 0198_auto_20230703_0828.py │ ├── 0199_rename_ulid_taxlotstate_ubid.py │ ├── 0200_rehash.py │ ├── 0201_ubidmodel.py │ ├── 0202_ubid_sql_functions.py │ ├── 0203_column_unique_column_name.py │ ├── 0204_eeej.py │ ├── 0205_auto_20230913_1417.py │ ├── 0206_auto_20230908_1319.py │ ├── 0207_uniformat.py │ ├── 0208_alter_scenario_event.py │ ├── 0209_auto_20230929_0959.py │ ├── 0210_natural_sort.py │ ├── 0211_auto_20240109_1348.py │ ├── 0212_add_filtergroup_labels.py │ ├── 0213_move_filtergroup_labels.py │ ├── 0214_delete_filtergroup_labels.py │ ├── 0215_accountability_hierarchy.py │ ├── 0216_alter_sensor_unique_together.py │ ├── 0217_goal_commitment_sqft.py │ ├── 0218_elements.py │ ├── 0219_auto_20240604_1605.py │ ├── 0220_alter_analysis_service.py │ ├── 0221_audittemplateconfig.py │ ├── 0222_cross_cycle_data_quality.py │ ├── 0223_water_use_columns.py │ ├── 0224_alter_meter_type.py │ ├── 0225_column_is_excluded_from_hash.py │ ├── 0226_rehash.py │ ├── 0227_remove_oauth.py │ ├── 0228_alter_analysis_service.py │ ├── 0229_add_extra_data_to_states.py │ ├── 0230_alter_event_cycle.py │ ├── 0231_column_is_updating.py │ ├── 0232_reportconfiguration.py │ ├── 0233_alter_goal_options.py │ ├── 0234_transaction_goals.py │ ├── 0235_inventorygroup_inventorygroupmapping.py │ ├── 0236_auto_20241004_1413.py │ ├── 0237_auto_20241008_1510.py │ ├── 0238_meter_systems.py │ ├── 0239_auto_20241030_1434.py │ ├── 0240_auto_20241106_1339.py │ ├── 0241_alter_meter_type.py │ ├── 0242_add_meter_types.py │ ├── 0243_update_bsync_measures_v2_6_0.py │ ├── 0244_goal_name_unique_within_org.py │ ├── 0245_facilities_plan.py │ ├── 0246_rename_indices.py │ ├── 0247_aggregatemetersystem.py │ └── __init__.py ├── models │ ├── __init__.py │ ├── analyses.py │ ├── analysis_input_files.py │ ├── analysis_messages.py │ ├── analysis_output_files.py │ ├── analysis_property_views.py │ ├── audit_template_configs.py │ ├── auditlog.py │ ├── building_file.py │ ├── certification.py │ ├── column_list_profile_columns.py │ ├── column_list_profiles.py │ ├── column_mapping_profiles.py │ ├── column_mappings.py │ ├── columns.py │ ├── compliance_metrics.py │ ├── cycles.py │ ├── data_quality.py │ ├── data_views.py │ ├── derived_columns.py │ ├── eeej.py │ ├── elements.py │ ├── events.py │ ├── facilities_plan.py │ ├── filter_group.py │ ├── goal_notes.py │ ├── goals.py │ ├── inventory_document.py │ ├── inventory_groups.py │ ├── measures.py │ ├── meters.py │ ├── models.py │ ├── notes.py │ ├── postoffice.py │ ├── properties.py │ ├── property_measures.py │ ├── report_configurations.py │ ├── salesforce_configs.py │ ├── salesforce_mappings.py │ ├── scenarios.py │ ├── sensors.py │ ├── simulations.py │ ├── systems.py │ ├── tax_lot_properties.py │ ├── tax_lots.py │ ├── ubid_models.py │ └── uniformat.py ├── ogbs │ └── flippers.py ├── pagination.py ├── public │ ├── __init__.py │ └── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20160411_1139.py │ │ ├── 0003_auto_20180106_2123.py │ │ └── __init__.py ├── renderers.py ├── search.py ├── serializers │ ├── __init__.py │ ├── access_level_instances.py │ ├── analyses.py │ ├── analysis_input_files.py │ ├── analysis_messages.py │ ├── analysis_output_files.py │ ├── analysis_property_views.py │ ├── audit_template_configs.py │ ├── base.py │ ├── building_file.py │ ├── celery.py │ ├── certification.py │ ├── column_list_profiles.py │ ├── column_mapping_profiles.py │ ├── column_mappings.py │ ├── columns.py │ ├── compliance_metrics.py │ ├── cycles.py │ ├── data_loggers.py │ ├── data_views.py │ ├── derived_columns.py │ ├── elements.py │ ├── events.py │ ├── facilities_plan.py │ ├── facilities_plan_run.py │ ├── filter_groups.py │ ├── goal_notes.py │ ├── goals.py │ ├── historical_notes.py │ ├── inventory_document.py │ ├── inventory_groups.py │ ├── labels.py │ ├── measures.py │ ├── meter_readings.py │ ├── meters.py │ ├── notes.py │ ├── organizations.py │ ├── pint.py │ ├── postoffice.py │ ├── properties.py │ ├── property_view_labels.py │ ├── report_configurations.py │ ├── rules.py │ ├── salesforce_configs.py │ ├── salesforce_mappings.py │ ├── scenarios.py │ ├── systems.py │ ├── tax_lot_properties.py │ ├── taxlots.py │ ├── ubid_models.py │ ├── uniformat.py │ ├── users.py │ └── utils.py ├── static │ └── seed │ │ ├── Terms_of_Service.txt │ │ ├── images │ │ ├── ali-tree-example-lg.webp │ │ ├── bg_first_td.webp │ │ ├── favicon.ico │ │ ├── gray_square.svg │ │ ├── icon-city.svg │ │ ├── kc_2.webp │ │ ├── map_pin.webp │ │ ├── red_triangle.svg │ │ ├── teal_circle.svg │ │ ├── timeline_electricity.svg │ │ ├── timeline_natural_gas.svg │ │ ├── timeline_peak_down.svg │ │ └── upsidedown_t.svg │ │ ├── js │ │ ├── constants.js │ │ ├── controllers │ │ │ ├── about_controller.js │ │ │ ├── accounts_controller.js │ │ │ ├── admin_controller.js │ │ │ ├── analyses_controller.js │ │ │ ├── analysis_controller.js │ │ │ ├── analysis_details_controller.js │ │ │ ├── analysis_run_controller.js │ │ │ ├── at_submission_import_modal_controller.js │ │ │ ├── bulk_edit_goalnotes_modal_controller.js │ │ │ ├── bulk_edit_properties_modal_controller.js │ │ │ ├── column_mapping_profile_modal_controller.js │ │ │ ├── column_mappings_controller.js │ │ │ ├── column_settings_controller.js │ │ │ ├── confirm_column_settings_modal_controller.js │ │ │ ├── confirm_organization_deletion_modal_controller.js │ │ │ ├── create_column_modal_controller.js │ │ │ ├── create_facilities_plan_run_modal_controller.js │ │ │ ├── create_organization_modal_controller.js │ │ │ ├── create_sub_organization_modal_controller.js │ │ │ ├── cycle_admin_controller.js │ │ │ ├── data_logger_upload_or_update_modal_controller.js │ │ │ ├── data_quality_admin_controller.js │ │ │ ├── data_quality_labels_modal_controller.js │ │ │ ├── data_quality_modal_controller.js │ │ │ ├── data_upload_audit_template_modal_controller.js │ │ │ ├── data_upload_espm_modal_controller.js │ │ │ ├── data_upload_modal_controller.js │ │ │ ├── data_view_controller.js │ │ │ ├── dataset_detail_controller.js │ │ │ ├── dataset_list_controller.js │ │ │ ├── delete_column_modal_controller.js │ │ │ ├── delete_cycle_modal_controller.js │ │ │ ├── delete_data_logger_modal_controller.js │ │ │ ├── delete_dataset_modal_controller.js │ │ │ ├── delete_document_modal_controller.js │ │ │ ├── delete_facilities_plan_run_modal_controller.js │ │ │ ├── delete_file_modal_controller.js │ │ │ ├── delete_modal_controller.js │ │ │ ├── delete_org_modal_controller.js │ │ │ ├── derived_columns_admin_controller.js │ │ │ ├── derived_columns_editor_controller.js │ │ │ ├── developer_controller.js │ │ │ ├── document_upload_modal_controller.js │ │ │ ├── email_templates_controller.js │ │ │ ├── email_templates_modal_controller.js │ │ │ ├── export_buildingsync_modal_controller.js │ │ │ ├── export_inventory_modal_controller.js │ │ │ ├── export_report_modal_controller.js │ │ │ ├── export_to_audit_template_modal_controller.js │ │ │ ├── export_to_cts_modal_controller.js │ │ │ ├── facilities_plan_controller.js │ │ │ ├── filter_group_modal_controller.js │ │ │ ├── geocode_modal_controller.js │ │ │ ├── goal_editor_modal_controller.js │ │ │ ├── green_button_upload_modal_controller.js │ │ │ ├── group_meter_creation_modal_controller.js │ │ │ ├── insights_program_controller.js │ │ │ ├── insights_property_controller.js │ │ │ ├── inventory_column_list_profiles_controller.js │ │ │ ├── inventory_cycles_controller.js │ │ │ ├── inventory_detail_analyses_controller.js │ │ │ ├── inventory_detail_analyses_modal_controller.js │ │ │ ├── inventory_detail_column_list_profiles_controller.js │ │ │ ├── inventory_detail_controller.js │ │ │ ├── inventory_detail_cycles_controller.js │ │ │ ├── inventory_detail_map_controller.js │ │ │ ├── inventory_detail_meters_controller.js │ │ │ ├── inventory_detail_notes_modal_controller.js │ │ │ ├── inventory_detail_sensors_controller.js │ │ │ ├── inventory_detail_timeline_controller.js │ │ │ ├── inventory_detail_ubid_controller.js │ │ │ ├── inventory_group_detail_controller.js │ │ │ ├── inventory_group_detail_dashboard_controller.js │ │ │ ├── inventory_group_detail_meters_controller.js │ │ │ ├── inventory_group_detail_systems_controller.js │ │ │ ├── inventory_group_list_controller.js │ │ │ ├── inventory_group_modal_controller.js │ │ │ ├── inventory_list_controller.js │ │ │ ├── inventory_map_controller.js │ │ │ ├── inventory_plots_controller.js │ │ │ ├── inventory_reports_controller.js │ │ │ ├── inventory_summary_controller.js │ │ │ ├── label_admin_controller.js │ │ │ ├── mapping_controller.js │ │ │ ├── members_controller.js │ │ │ ├── menu_controller.js │ │ │ ├── merge_modal_controller.js │ │ │ ├── meter_deletion_modal_controller.js │ │ │ ├── meter_edit_modal_controller.js │ │ │ ├── modified_modal_controller.js │ │ │ ├── move_inventory_modal_controller.js │ │ │ ├── new_member_modal_controller.js │ │ │ ├── notes_controller.js │ │ │ ├── organization_access_level_tree_controller.js │ │ │ ├── organization_add_access_level_instance_modal_controller.js │ │ │ ├── organization_add_access_level_modal_controller.js │ │ │ ├── organization_controller.js │ │ │ ├── organization_delete_access_level_instance_modal_controller.js │ │ │ ├── organization_edit_access_level_instance_modal_controller.js │ │ │ ├── organization_settings_controller.js │ │ │ ├── organization_sharing_controller.js │ │ │ ├── pairing_controller.js │ │ │ ├── pairing_settings_controller.js │ │ │ ├── portfolio_summary_controller.js │ │ │ ├── postoffice_modal_controller.js │ │ │ ├── profile_controller.js │ │ │ ├── program_setup_controller.js │ │ │ ├── qr_code_scan_modal_controller.js │ │ │ ├── record_match_merge_link_modal_controller.js │ │ │ ├── rename_column_modal_controller.js │ │ │ ├── report_configuration_modal_controller.js │ │ │ ├── reset_modal_controller.js │ │ │ ├── sample_data_modal_controller.js │ │ │ ├── security_controller.js │ │ │ ├── sensor_delete_modal_controller.js │ │ │ ├── sensor_readings_upload_modal_controller.js │ │ │ ├── sensor_update_modal_controller.js │ │ │ ├── sensors_upload_modal_controller.js │ │ │ ├── service_detail_controller.js │ │ │ ├── service_meter_creation_modal_controller.js │ │ │ ├── service_modal_controller.js │ │ │ ├── set_update_to_now_modal_controller.js │ │ │ ├── settings_profile_modal_controller.js │ │ │ ├── show_populated_columns_modal_controller.js │ │ │ ├── system_meter_readings_upload_modal_controller.js │ │ │ ├── system_modal_controller.js │ │ │ ├── two_factor_profile_controller.js │ │ │ ├── ubid_admin_controller.js │ │ │ ├── ubid_admin_modal_controller.js │ │ │ ├── ubid_decode_modal_controller.js │ │ │ ├── ubid_editor_modal_controller.js │ │ │ ├── ubid_jaccard_index_modal_controller.js │ │ │ ├── unmerge_modal_controller.js │ │ │ ├── update_derived_data_modal_controller.js │ │ │ ├── update_inventory_groups_modal_controller.js │ │ │ └── update_item_labels_modal_controller.js │ │ ├── decorators │ │ │ └── ui-grid.js │ │ ├── directives │ │ │ ├── sd-dropdown-template.html │ │ │ ├── sdBasicPropertyInfoChart.js │ │ │ ├── sdCheckCycleExists.js │ │ │ ├── sdCheckLabelExists.js │ │ │ ├── sdDropdown.js │ │ │ ├── sdEnter.js │ │ │ ├── sdLabel.js │ │ │ ├── sdResizable.js │ │ │ ├── sdScrollSync.js │ │ │ ├── sdUbid.js │ │ │ ├── sdUploader.js │ │ │ └── sdWhenScrolled.js │ │ ├── filters │ │ │ ├── district.js │ │ │ ├── floatingPoint.js │ │ │ ├── fromNow.js │ │ │ ├── getAnalysisRunAuthor.js │ │ │ ├── htmlToPlainText.js │ │ │ ├── ignoremap.js │ │ │ ├── startCase.js │ │ │ ├── startFrom.js │ │ │ ├── stripImportPrefix.js │ │ │ ├── titleCase.js │ │ │ ├── tolerantNumber.js │ │ │ └── typedNumber.js │ │ ├── seed.js │ │ ├── services │ │ │ ├── ah_service.js │ │ │ ├── analyses_service.js │ │ │ ├── audit_template_service.js │ │ │ ├── auth_service.js │ │ │ ├── cache_entry_service.js │ │ │ ├── column_mappings_service.js │ │ │ ├── columns_service.js │ │ │ ├── compliance_metric_service.js │ │ │ ├── cycle_service.js │ │ │ ├── data_quality_service.js │ │ │ ├── data_view_service.js │ │ │ ├── dataset_service.js │ │ │ ├── derived_columns_service.js │ │ │ ├── element_service.js │ │ │ ├── espm_service.js │ │ │ ├── event_service.js │ │ │ ├── facilities_plan_run_service.js │ │ │ ├── facilities_plan_service.js │ │ │ ├── filter_groups_service.js │ │ │ ├── flippers.js │ │ │ ├── geocode_service.js │ │ │ ├── goal_service.js │ │ │ ├── http_serializer.js │ │ │ ├── inventory_group_service.js │ │ │ ├── inventory_reports_service.js │ │ │ ├── inventory_service.js │ │ │ ├── label_service.js │ │ │ ├── main_service.js │ │ │ ├── map_service.js │ │ │ ├── mapping_service.js │ │ │ ├── matching_service.js │ │ │ ├── meter_service.js │ │ │ ├── meters_service.js │ │ │ ├── modified_service.js │ │ │ ├── note_service.js │ │ │ ├── organization_service.js │ │ │ ├── pairing_service.js │ │ │ ├── postoffice_service.js │ │ │ ├── property_measure_service.js │ │ │ ├── report_configurations_service.js │ │ │ ├── salesforce_config_service.js │ │ │ ├── salesforce_mapping_service.js │ │ │ ├── scenario_service.js │ │ │ ├── search_service.js │ │ │ ├── sensor_service.js │ │ │ ├── service_service.js │ │ │ ├── simple_modal_service.js │ │ │ ├── system_service.js │ │ │ ├── two_factor_service.js │ │ │ ├── ubid_service.js │ │ │ ├── uniformat_service.js │ │ │ ├── uploader_service.js │ │ │ └── user_service.js │ │ └── utilities │ │ │ └── spinner.js │ │ ├── locales │ │ ├── en_US.json │ │ ├── es.json │ │ └── fr_CA.json │ │ ├── partials │ │ ├── about.html │ │ ├── access_level_instances_import_messages.html │ │ ├── accounts.html │ │ ├── accounts_nav.html │ │ ├── admin.html │ │ ├── analyses.html │ │ ├── analysis.html │ │ ├── analysis_card.html │ │ ├── analysis_details.html │ │ ├── analysis_run.html │ │ ├── analysis_runs.html │ │ ├── api_docs.html │ │ ├── at_scenarios.html │ │ ├── at_submission_import_modal.html │ │ ├── bulk_edit_goalnotes_modal.html │ │ ├── bulk_edit_properties_modal.html │ │ ├── column_mapping_profile_modal.html │ │ ├── column_mappings.html │ │ ├── column_settings.html │ │ ├── confirm_column_settings_modal.html │ │ ├── confirm_organization_deletion_modal.html │ │ ├── contact.html │ │ ├── create_column_modal.html │ │ ├── create_facilities_plan_run_modal.html │ │ ├── create_organization_modal.html │ │ ├── create_sub_organization_modal.html │ │ ├── custom_ng_tags_input.html │ │ ├── custom_view_modal.html │ │ ├── cycle_admin.html │ │ ├── data_logger_upload_or_update_modal.html │ │ ├── data_quality_admin.html │ │ ├── data_quality_labels_modal.html │ │ ├── data_quality_modal.html │ │ ├── data_upload_audit_template_modal.html │ │ ├── data_upload_espm_modal.html │ │ ├── data_upload_modal.html │ │ ├── data_upload_modal_progress.html │ │ ├── data_view.html │ │ ├── dataset_detail.html │ │ ├── dataset_list.html │ │ ├── delete_column_modal.html │ │ ├── delete_cycle_modal.html │ │ ├── delete_data_logger_modal.html │ │ ├── delete_dataset_modal.html │ │ ├── delete_document_modal.html │ │ ├── delete_facilities_plan_run_modal.html │ │ ├── delete_file_modal.html │ │ ├── delete_modal.html │ │ ├── delete_org_modal.html │ │ ├── derived_columns_admin.html │ │ ├── derived_columns_editor.html │ │ ├── developer.html │ │ ├── document_upload_modal.html │ │ ├── email_templates.html │ │ ├── email_templates_modal.html │ │ ├── event_analysis_card.html │ │ ├── export_buildingsync_modal.html │ │ ├── export_inventory_modal.html │ │ ├── export_report_modal.html │ │ ├── export_to_audit_template_modal.html │ │ ├── export_to_cts_modal.html │ │ ├── facilities_plan.html │ │ ├── filter_group_modal.html │ │ ├── geocode_modal.html │ │ ├── goal_editor_modal.html │ │ ├── green_button_upload_modal.html │ │ ├── group_meter_creation_modal.html │ │ ├── home.html │ │ ├── import_messages.html │ │ ├── insights_nav.html │ │ ├── insights_program.html │ │ ├── insights_property.html │ │ ├── inventory_column_list_profiles.html │ │ ├── inventory_cycles.html │ │ ├── inventory_detail.html │ │ ├── inventory_detail_analyses.html │ │ ├── inventory_detail_analyses_modal.html │ │ ├── inventory_detail_column_list_profiles.html │ │ ├── inventory_detail_cycles.html │ │ ├── inventory_detail_header.html │ │ ├── inventory_detail_meters.html │ │ ├── inventory_detail_nav.html │ │ ├── inventory_detail_notes.html │ │ ├── inventory_detail_notes_modal.html │ │ ├── inventory_detail_sensors.html │ │ ├── inventory_detail_timeline.html │ │ ├── inventory_detail_ubid.html │ │ ├── inventory_group_detail.html │ │ ├── inventory_group_detail_dashboard.html │ │ ├── inventory_group_detail_meters.html │ │ ├── inventory_group_detail_nav.html │ │ ├── inventory_group_detail_systems.html │ │ ├── inventory_group_modal.html │ │ ├── inventory_groups_list.html │ │ ├── inventory_list.html │ │ ├── inventory_loading_modal.html │ │ ├── inventory_map.html │ │ ├── inventory_nav.html │ │ ├── inventory_plots.html │ │ ├── inventory_reports.html │ │ ├── inventory_summary.html │ │ ├── label_admin.html │ │ ├── mapping.html │ │ ├── members.html │ │ ├── merge_modal.html │ │ ├── meter_deletion_modal.html │ │ ├── meter_edit_modal.html │ │ ├── modified_modal.html │ │ ├── move_inventory_modal.html │ │ ├── new_member_modal.html │ │ ├── notes.html │ │ ├── notes_modal.html │ │ ├── organization_access_level_tree.html │ │ ├── organization_add_access_level_instance_modal.html │ │ ├── organization_add_access_level_modal.html │ │ ├── organization_delete_access_level_instance_modal.html │ │ ├── organization_edit_access_level_instance_modal.html │ │ ├── organization_settings.html │ │ ├── organization_sharing.html │ │ ├── pairing.html │ │ ├── pairing_nav.html │ │ ├── pairing_settings.html │ │ ├── portfolio_summary.html │ │ ├── postoffice_modal.html │ │ ├── profile.html │ │ ├── profile_nav.html │ │ ├── program_setup.html │ │ ├── qr_code_scan_modal.html │ │ ├── record_match_merge_link_modal.html │ │ ├── rename_column_modal.html │ │ ├── report_configuration_modal.html │ │ ├── reset_modal.html │ │ ├── sample_data_modal.html │ │ ├── security.html │ │ ├── sensor_delete_modal.html │ │ ├── sensor_readings_upload_modal.html │ │ ├── sensor_update_modal.html │ │ ├── sensors_upload_modal.html │ │ ├── service_detail.html │ │ ├── service_meter_creation_modal.html │ │ ├── service_modal.html │ │ ├── services_table.html │ │ ├── set_update_to_now_modal.html │ │ ├── settings_profile_modal.html │ │ ├── show_populated_columns_modal.html │ │ ├── simple_modal.html │ │ ├── sub_org.html │ │ ├── system_meter_readings_upload_modal.html │ │ ├── system_modal.html │ │ ├── systems_table.html │ │ ├── two_factor_profile.html │ │ ├── ubid_admin.html │ │ ├── ubid_admin_modal.html │ │ ├── ubid_decode_modal.html │ │ ├── ubid_editor_modal.html │ │ ├── ubid_jaccard_index_modal.html │ │ ├── unmerge_modal.html │ │ ├── update_derived_data_modal.html │ │ ├── update_inventory_groups_modal.html │ │ └── update_item_labels_modal.html │ │ ├── pdf │ │ ├── SEED_Platform_V1.1_Getting_Started_Guide.pdf │ │ ├── SEED_Platform_V1_3_Getting_Started_Guide.pdf │ │ ├── SEED_Platform_V2_18_Getting_Started_Guide.pdf │ │ ├── SEED_Release_2_User_Guide.pdf │ │ └── SEED_v1_User_Guide.pdf │ │ ├── sample-data │ │ ├── __MACOSX │ │ │ ├── ._seed-sample-data │ │ │ └── seed-sample-data │ │ │ │ ├── ._interval_data-example-pm-monthly-meter-usage.xlsx │ │ │ │ ├── ._interval_data-portfolio-manager-sample.xlsx │ │ │ │ ├── ._simple_data-covered-buildings-sample.csv │ │ │ │ └── ._simple_data-portfolio-manager-sample.csv │ │ ├── seed-sample-data.zip │ │ └── seed-sample-data │ │ │ ├── interval_data-example-pm-monthly-meter-usage.xlsx │ │ │ ├── interval_data-portfolio-manager-sample.xlsx │ │ │ ├── simple_data-covered-buildings-sample.csv │ │ │ └── simple_data-portfolio-manager-sample.csv │ │ ├── scss │ │ ├── ng-wig.css │ │ └── style.scss │ │ └── tests │ │ ├── .eslintrc.js │ │ ├── admin_controller.spec.js │ │ ├── create_sub_organization_modal_controller.spec.js │ │ ├── data_quality_admin_controller.spec.js │ │ ├── data_quality_modal_controller.spec.js │ │ ├── data_upload_modal_controller.spec.js │ │ ├── dataset_detail_controller.spec.js │ │ ├── dataset_list_controller.spec.js │ │ ├── district.spec.js │ │ ├── fromNow.spec.js │ │ ├── ignoremap.spec.js │ │ ├── inventory_detail_controller.spec.js │ │ ├── inventory_service.spec.js │ │ ├── mapping_controller.spec.js │ │ ├── members_controller.spec.js │ │ ├── new_member_modal_controller.spec.js │ │ ├── property_detail_controller.spec.js │ │ ├── run_jasmine.js │ │ ├── sdLabel.spec.js │ │ ├── sdUploader.spec.js │ │ ├── search_service.spec.js │ │ ├── settings_controller.spec.js │ │ ├── stripImportPrefix.spec.js │ │ ├── taxlot_detail_controller.spec.js │ │ ├── titleCase.spec.js │ │ └── update_item_labels_controller.spec.js ├── tasks.py ├── templates │ ├── drf-yasg │ │ └── swagger-ui.html │ └── seed │ │ ├── _fonts.html │ │ ├── _header.html │ │ ├── _js_urls.html │ │ ├── _scripts.html │ │ ├── _sidebar.html │ │ ├── _vendor_scripts.html │ │ ├── account_create_email.html │ │ ├── account_org_added.html │ │ ├── base.html │ │ ├── index.html │ │ ├── jasmine_tests │ │ └── AngularJSTests.html │ │ └── salesforce_update_errors.html ├── templatetags │ ├── __init__.py │ ├── breadcrumbs.py │ └── settings_value.py ├── test_helpers │ ├── __init__.py │ └── fake.py ├── tests │ ├── __init__.py │ ├── api │ │ ├── seed_readingtools.py │ │ ├── test_modules.py │ │ └── test_seed_host_api.py │ ├── data │ │ ├── 2019-2020_Multiple Cycle Taxlots.xlsx │ │ ├── 2019-2020_Multiple Cycle Year only.xlsx │ │ ├── Has_Meters_two_buildings.xlsx │ │ ├── Sample_MultipleCycles.xlsx │ │ ├── access-level-instances.xlsx │ │ ├── access-levels-wrong1.xlsx │ │ ├── access-levels-wrong2.xlsx │ │ ├── access-levels-wrong3.xlsx │ │ ├── bps │ │ │ ├── Add_Bills_to_Meters.xlsx │ │ │ ├── Add_Meters.xlsx │ │ │ ├── Add_Properties_en.xlsx │ │ │ ├── BPS-sample-Targets-2019.xlsx │ │ │ ├── BPS-sample-Targets-2020.xlsx │ │ │ ├── BPS-sample-Targets-2021.xlsx │ │ │ ├── BPS-sample-Targets-2022.xlsx │ │ │ ├── BPS-sample-Targets-2023.xlsx │ │ │ ├── BPS_Sample_AT_11911.xml │ │ │ ├── BPS_Sample_AT_12227.xml │ │ │ ├── BPS_Sample_AT_17971.xml │ │ │ ├── BPS_Sample_AT_21368.xml │ │ │ ├── BPS_Sample_AT_21378.xml │ │ │ ├── BPS_Sample_AT_21381.xml │ │ │ ├── BPS_Sample_AT_21404.xml │ │ │ ├── BPS_Sample_AT_21405_2019.xml │ │ │ ├── BPS_Sample_AT_21405_2020.xml │ │ │ ├── BPS_Sample_AT_21405_2021.xml │ │ │ ├── BPS_Sample_AT_21426.xml │ │ │ ├── CBL-building-performance-standards-sample-2019.xlsx │ │ │ ├── CBL-building-performance-standards-sample-2020.xlsx │ │ │ ├── CBL-building-performance-standards-sample-2021.xlsx │ │ │ ├── CBL-building-performance-standards-sample-2022.xlsx │ │ │ ├── CBL-building-performance-standards-sample-2023.xlsx │ │ │ ├── ESPM_BPS_Sample_Meter_Readings.xlsx │ │ │ └── README.md │ │ ├── bsync_export_to_at_with_meters_measures.xml │ │ ├── building_sync_xml.txt │ │ ├── covered-buildings-sample-with-errors.csv │ │ ├── covered-buildings-sample.csv │ │ ├── data-quality-check-sample.csv │ │ ├── example-GreenButton-data-1-overlapping.xml │ │ ├── example-GreenButton-data.xml │ │ ├── example-GreenButton-data2.xml │ │ ├── example-bsyncr-output.xml │ │ ├── example-bsyncr-plot.png │ │ ├── example-data-request-response-new-format.xlsx │ │ ├── example-data-request-response.xlsx │ │ ├── example-pm-monthly-meter-usage-2-cost-meters.xlsx │ │ ├── example-pm-monthly-meter-usage-with-unknown-types-and-units.xlsx │ │ ├── example-pm-monthly-meter-usage.xlsx │ │ ├── example-sensor-metadata.xlsx │ │ ├── example-sensor-readings-small-bad.csv │ │ ├── example-sensor-readings-small.csv │ │ ├── example-sensor-readings.csv │ │ ├── mappings │ │ │ ├── covered-buildings-mapping-v2.csv │ │ │ ├── covered-buildings-mapping.csv │ │ │ ├── espm-single-mapping.csv │ │ │ └── portfolio-manager-mapping.csv │ │ ├── nrel-site.geojson │ │ ├── portfolio-manager-report.xml │ │ ├── portfolio-manager-sample-missing-headers.csv │ │ ├── portfolio-manager-sample-with-crlf.xlsx │ │ ├── portfolio-manager-sample-with-errors.csv │ │ ├── portfolio-manager-sample.csv │ │ ├── portfolio-manager-sample.xls │ │ ├── portfolio-manager-sample.xlsx │ │ ├── portfolio-manager-single-22482007.xlsx │ │ ├── property_sample_data.json │ │ ├── san-jose-test-properties.csv │ │ ├── san-jose-test-taxlots.csv │ │ ├── system_meter_readings.xlsx │ │ ├── test-document.pdf │ │ ├── test_datatype_mapping.csv │ │ ├── test_mapping.csv │ │ └── vcr_cassettes │ │ │ ├── geocode_101_unique_addresses.yaml │ │ │ ├── geocode_base_case.yaml │ │ │ ├── geocode_dup_addresses.yaml │ │ │ ├── geocode_invalid_or_expired_key.yaml │ │ │ ├── geocode_low_geocodequality.yaml │ │ │ ├── geocode_multiple_results.yaml │ │ │ ├── geocode_property_custom_fields.yaml │ │ │ ├── geocode_reserved_and_unsafe_characters.yaml │ │ │ ├── geocode_same_record_twice.yaml │ │ │ └── geocode_taxlots_custom_fields.yaml │ ├── test_account_views.py │ ├── test_address_normalization.py │ ├── test_admin_views.py │ ├── test_analyses_views.py │ ├── test_analysis_messages.py │ ├── test_analysis_pipelines.py │ ├── test_analysis_property_views.py │ ├── test_analysis_utils.py │ ├── test_api.py │ ├── test_api_mixins.py │ ├── test_audit_template.py │ ├── test_audit_template_configs.py │ ├── test_building_file.py │ ├── test_certification_models.py │ ├── test_certification_serializers.py │ ├── test_column_list_profile.py │ ├── test_column_list_profiles_views.py │ ├── test_column_mapping_profiles_views.py │ ├── test_column_views.py │ ├── test_columns.py │ ├── test_compliance_metrics_views.py │ ├── test_cycle.py │ ├── test_cycles.py │ ├── test_data_quality_check_rules_views.py │ ├── test_data_quality_checks.py │ ├── test_data_view_views.py │ ├── test_decorators.py │ ├── test_derived_columns.py │ ├── test_element_views.py │ ├── test_elements.py │ ├── test_events.py │ ├── test_facilities_plan.py │ ├── test_filter_groups.py │ ├── test_gbr_properties.py │ ├── test_geocode_views.py │ ├── test_goals.py │ ├── test_green_assessments.py │ ├── test_greenbutton_import.py │ ├── test_import_file_views.py │ ├── test_inventory_document.py │ ├── test_inventory_groups.py │ ├── test_labels.py │ ├── test_labels_api_views.py │ ├── test_match_existing.py │ ├── test_measures.py │ ├── test_media.py │ ├── test_meter_usage_import.py │ ├── test_meter_views.py │ ├── test_note.py │ ├── test_note_views.py │ ├── test_numeric_expression_parser.py │ ├── test_organization_access_levels.py │ ├── test_organization_users.py │ ├── test_organization_utils.py │ ├── test_organization_views.py │ ├── test_permissions.py │ ├── test_portfoliomanager.py │ ├── test_postoffice.py │ ├── test_properties_serializers.py │ ├── test_property_measures.py │ ├── test_property_view_labels.py │ ├── test_property_views.py │ ├── test_property_views_viewset.py │ ├── test_public_views.py │ ├── test_renderers.py │ ├── test_report_configurations.py │ ├── test_reports.py │ ├── test_salesforce_views.py │ ├── test_scenarios.py │ ├── test_search.py │ ├── test_sensors.py │ ├── test_services.py │ ├── test_sharing.py │ ├── test_string_expression_parser.py │ ├── test_systems.py │ ├── test_tasks.py │ ├── test_tax_lot_property.py │ ├── test_taxlot_views.py │ ├── test_taxlot_views_viewset.py │ ├── test_ubids.py │ ├── test_utils.py │ ├── test_utils_geocode.py │ ├── test_utils_ubid.py │ ├── test_views.py │ ├── util.py │ └── v4 │ │ ├── test_analyses_views.py │ │ ├── test_organization_user_views.py │ │ └── test_taxlot_property_views.py ├── token_generators.py ├── ubid │ ├── buildingid_functions.sql │ ├── buildingid_postgis_functions.sql │ └── pluscode_functions.sql ├── urls.py ├── utils │ ├── CTS Facility Upload Template.xlsx │ ├── __init__.py │ ├── address.py │ ├── api.py │ ├── api_schema.py │ ├── buildings.py │ ├── cache.py │ ├── cprofile.py │ ├── encrypt.py │ ├── facilities_plan_output.xlsx │ ├── generic.py │ ├── geocode.py │ ├── goal_notes.py │ ├── goals.py │ ├── import_file.py │ ├── inventory_filter.py │ ├── labels.py │ ├── match.py │ ├── merge.py │ ├── meters.py │ ├── migrations.py │ ├── nocache.py │ ├── organizations.py │ ├── pagination.py │ ├── properties.py │ ├── public.py │ ├── salesforce.py │ ├── search.py │ ├── sensors.py │ ├── serializers.py │ ├── strings.py │ ├── tax_lot_properties.py │ ├── taxlots.py │ ├── time_utils.py │ ├── two_factor.py │ ├── ubid.py │ ├── users.py │ ├── v4 │ │ └── inventory_filter.py │ └── viewsets.py ├── validators.py └── views │ ├── __init__.py │ ├── main.py │ ├── v3 │ ├── access_levels.py │ ├── analyses.py │ ├── analysis_messages.py │ ├── analysis_views.py │ ├── audit_template.py │ ├── audit_template_configs.py │ ├── building_files.py │ ├── cache_entries.py │ ├── column_list_profiles.py │ ├── column_mapping_profiles.py │ ├── columns.py │ ├── compliance_metrics.py │ ├── cycles.py │ ├── data │ │ ├── PM Meter Data.xlsx │ │ ├── example-GreenButton-data.xml │ │ └── example-pm-monthly-meter-usage.xlsx │ ├── data_logger.py │ ├── data_quality_check_rules.py │ ├── data_quality_checks.py │ ├── data_views.py │ ├── datasets.py │ ├── derived_columns.py │ ├── eeej.py │ ├── elements.py │ ├── events.py │ ├── facilities_plan.py │ ├── facilities_plan_run.py │ ├── filter_group.py │ ├── gbr_properties.py │ ├── geocode.py │ ├── goal_notes.py │ ├── goals.py │ ├── green_assessment_properties.py │ ├── green_assessment_urls.py │ ├── green_assessments.py │ ├── historical_notes.py │ ├── import_files.py │ ├── inventory_group_mappings.py │ ├── inventory_groups.py │ ├── label_inventories.py │ ├── labels.py │ ├── measures.py │ ├── media.py │ ├── meter_readings.py │ ├── meters.py │ ├── notes.py │ ├── organization_users.py │ ├── organizations.py │ ├── portfolio_manager.py │ ├── postoffice.py │ ├── progress.py │ ├── properties.py │ ├── property_measures.py │ ├── property_scenarios.py │ ├── property_view_labels.py │ ├── property_views.py │ ├── public.py │ ├── report_configurations.py │ ├── salesforce_configs.py │ ├── salesforce_mappings.py │ ├── sensors.py │ ├── services.py │ ├── systems.py │ ├── tax_lot_properties.py │ ├── taxlot_views.py │ ├── taxlots.py │ ├── two_factor_views.py │ ├── ubid.py │ ├── uniformat.py │ ├── uploads.py │ └── users.py │ └── v4 │ ├── analyses.py │ ├── organization_users.py │ └── taxlot_properties.py ├── setup.py ├── tox.ini └── vendors ├── package-lock.json └── package.json /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | # 2 | # ---Choose Your Languages--- 3 | # To disable analysis for a certain language, set the language to `false`. 4 | # For help setting your languages: 5 | # http://docs.codeclimate.com/article/169-configuring-analysis-languages 6 | # 7 | languages: 8 | Ruby: false 9 | JavaScript: true 10 | Python: true 11 | PHP: false 12 | # 13 | # ---Exclude Files or Directories--- 14 | # List the files or directories you would like excluded from our analysis. 15 | # For help setting your exclude paths: 16 | # http://docs.codeclimate.com/article/166-excluding-files-folders 17 | # 18 | exclude_paths: 19 | - "seed/static/vendors/*" 20 | -------------------------------------------------------------------------------- /.cspell.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2", 3 | "language": "en", 4 | "dictionaryDefinitions": [ 5 | { 6 | "name": "workspace", 7 | "path": "./.spelling.dic", 8 | "addWords": true 9 | } 10 | ], 11 | "dictionaries": [ 12 | "workspace" 13 | ], 14 | "enabled": true 15 | } 16 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | # .git # For now add in the .git repo so that the version is parsed on the page correctly 2 | .github 3 | .gitignore 4 | .dockerignore 5 | .idea 6 | .tox 7 | ./docker-compose*.yml 8 | ./deploy.sh 9 | **/*.pyc 10 | collected_static 11 | deploy.sh 12 | docs 13 | media 14 | node_modules 15 | vendors/node_modules 16 | config/settings/local_untracked.py 17 | config/settings/local_untracked.py.dist 18 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | charset = utf-8 6 | trim_trailing_whitespace = true 7 | insert_final_newline = true 8 | 9 | [*.{html,js,json}] 10 | indent_size = 2 11 | 12 | [*.py] 13 | indent_size = 4 14 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | seed/static/seed/js/decorators/* 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior, in case people don't have core.autocrlf set. 2 | * text=auto 3 | 4 | # Explicitly declare text files you want to always be normalized and converted 5 | # to native line endings on checkout. 6 | #*.c text 7 | #*.h text 8 | 9 | # Declare files that will always have CRLF line endings on checkout. 10 | #*.sln text eol=crlf 11 | 12 | # Declare files that will always have LF line endings on checkout. 13 | *.sh text eol=lf 14 | *.py text eol=lf 15 | 16 | # Denote all files that are truly binary and should not be modified. 17 | *.png binary 18 | *.jpg binary 19 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### Any background context you want to provide? 4 | 5 | #### What's this PR do? 6 | 7 | #### How should this be manually tested? 8 | 9 | #### What are the relevant tickets? 10 | 11 | #### Screenshots (if appropriate) 12 | -------------------------------------------------------------------------------- /.github/SEED_Contribution_Proposal_v1.1_2022-12-05.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/.github/SEED_Contribution_Proposal_v1.1_2022-12-05.docx -------------------------------------------------------------------------------- /.github/workflows/pr-labels.yml: -------------------------------------------------------------------------------- 1 | name: Verify Pull Request Labeling 2 | 3 | on: 4 | pull_request: 5 | types: [opened, labeled, unlabeled, synchronize] 6 | 7 | jobs: 8 | check_pr_labels: 9 | runs-on: ubuntu-22.04 10 | steps: 11 | - name: Verify PR label action 12 | uses: mheap/github-action-required-labels@v5 13 | with: 14 | mode: minimum 15 | count: 1 16 | labels: 'Feature, Bug, Enhancement, Maintenance, Documentation, Performance, Do not publish' 17 | add_comment: true 18 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "ng_seed/seed-angular"] 2 | path = ng_seed/seed-angular 3 | url = https://github.com/SEED-platform/seed-angular.git 4 | branch = main 5 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | CHANGELOG.md 2 | charts/persistentvolumes/templates/ 3 | charts/seed/templates/ 4 | seed/static/seed/locales/ 5 | seed/tests/data/vcr_cassettes/ 6 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "overrides": [ 4 | { 5 | "files": "*.html", 6 | "options": { 7 | "printWidth": 200 8 | } 9 | }, 10 | { 11 | "files": "*.js", 12 | "options": { 13 | "printWidth": 200, 14 | "trailingComma": "none" 15 | } 16 | }, 17 | { 18 | "files": "*.scss", 19 | "options": { 20 | "printWidth": 200 21 | } 22 | }, 23 | { 24 | "files": ["*.yaml", "*.yml"], 25 | "options": { 26 | "singleQuote": false 27 | } 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /bin/drop_create_db.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # drops the ``seed`` DB, then creates it. Add a super_user 3 | # demo@seed-platform.org with password demo 4 | 5 | dropdb seed 6 | createdb seed 7 | python manage.py syncdb --migrate 8 | python manage.py create_default_user 9 | -------------------------------------------------------------------------------- /bin/setup_database.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # NL (1/29/2016) -- Can we delete this file, it seemed to be for docker 4 | cd /seed 5 | 6 | ./manage.py syncdb 7 | ./manage.py migrate 8 | ./manage.py create_default_user 9 | -------------------------------------------------------------------------------- /bin/start_celery.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | WORKERS=$(($(nproc) * 2)) 4 | WORKERS=$(($WORKERS>1?$WORKERS:1)) 5 | celery -A seed beat -l INFO -S django_celery_beat.schedulers:DatabaseScheduler & 6 | celery -A seed worker -l INFO -c $WORKERS --max-tasks-per-child 1000 -E 7 | -------------------------------------------------------------------------------- /bin/start_uwsgi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | WORKERS=$(($(nproc) / 2)) 4 | WORKERS=$(($WORKERS>1?$WORKERS:1)) 5 | /usr/local/bin/uwsgi --http 127.0.0.1:8000 --module wsgi --daemonize /home/ubuntu/uwsgi.log --max-requests 5000 --pidfile /tmp/uwsgi.pid --cheaper-initial 1 -p $WORKERS --single-interpreter --enable-threads --touch-reload /home/ubuntu/touch-reload 6 | -------------------------------------------------------------------------------- /config/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /config/settings/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /config/template_context.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | 7 | def session_key(request): 8 | from django.conf import settings 9 | 10 | try: 11 | return {"SESSION_KEY": request.COOKIES[settings.SESSION_COOKIE_NAME]} 12 | except BaseException: 13 | return {} 14 | 15 | 16 | def sentry_js(request): 17 | from django.conf import settings 18 | 19 | # Exists and isn't None. 20 | if hasattr(settings, "SENTRY_JS_DSN") and settings.SENTRY_JS_DSN: 21 | return {"SENTRY_JS_DSN": settings.SENTRY_JS_DSN} 22 | return {} 23 | -------------------------------------------------------------------------------- /config/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /config/tests/test_views.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from django.test import TestCase 7 | from django.urls import reverse 8 | 9 | 10 | class RobotsTests(TestCase): 11 | def test_robots(self): 12 | response = self.client.get(reverse("robots_txt")) 13 | self.assertEqual(200, response.status_code) 14 | -------------------------------------------------------------------------------- /config/utils.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | import logging 7 | import re 8 | 9 | logger = logging.getLogger(__name__) 10 | 11 | 12 | def de_camel_case(name): 13 | s1 = re.sub("(.)([A-Z][a-z]+)", r"\1 \2", name) 14 | return re.sub("([a-z0-9])([A-Z])", r"\1 \2", s1) 15 | -------------------------------------------------------------------------------- /config/views.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from django.conf import settings 7 | from django.http import HttpResponse 8 | 9 | 10 | def robots_txt(request, allow=False): 11 | env = getattr(settings, "ENV", "development").lower() 12 | 13 | if env == "production" or allow: 14 | content = "User-agent: *\nAllow: /" 15 | else: 16 | content = "User-agent: *\nDisallow: /" 17 | 18 | return HttpResponse(content, content_type="text/plain") 19 | -------------------------------------------------------------------------------- /docker-compose.build.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # This docker-compose version is the configuration when deploying SEED using the 3 | # ./deploy.sh script. This file only builds what is needed for deploying locally. 4 | services: 5 | db-postgres: 6 | container_name: seed_postgres 7 | image: timescale/timescaledb-postgis:latest-pg12 8 | db-redis: 9 | container_name: seed_redis 10 | image: redis:5.0.1 11 | web: 12 | container_name: seed_web 13 | image: seedplatform/seed:latest 14 | build: . 15 | web-celery: 16 | container_name: seed_celery 17 | image: seedplatform/seed:latest 18 | build: . 19 | volumes: 20 | seed_pgdata: 21 | external: true 22 | seed_media: 23 | external: true 24 | -------------------------------------------------------------------------------- /docker/maintenance.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$1" == 'on' ] 4 | then 5 | sed -e 's||'"$(date '+%-m/%-d %-H:%M %Z')"'|g' /seed/docker/maintenance.html > /seed/collected_static/maintenance.html 6 | echo '...maintenance is on...'; 7 | elif [ "$1" == 'off' ] 8 | then 9 | rm -f /seed/collected_static/maintenance.html 10 | echo '...maintenance is off...'; 11 | fi 12 | -------------------------------------------------------------------------------- /docker/nginx/seed-uwsgi.conf: -------------------------------------------------------------------------------- 1 | uwsgi_pass seed_upstream; 2 | uwsgi_read_timeout 600s; 3 | uwsgi_send_timeout 600s; 4 | 5 | # https://stackoverflow.com/a/40375474/2730450 6 | uwsgi_ignore_client_abort on; 7 | 8 | include uwsgi_params; 9 | -------------------------------------------------------------------------------- /docker/seed-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Make sure not to echo anything out here because some of the scripts that test SEED 4 | # call docker compose run and expect the response to be in the command line. 5 | mkdir -p /seed/collected_static && chmod 775 /seed/collected_static 6 | mkdir -p /seed/media && chmod 777 /seed/media 7 | mkdir -p /seed/media/uploads && chmod 777 /seed/media/uploads 8 | mkdir -p /seed/media/uploads/pm_imports && chmod 777 /seed/media/uploads/pm_imports 9 | 10 | # set the owner to uwsgi 11 | chown -R 1000 /seed/collected_static 12 | 13 | exec "$@" 14 | -------------------------------------------------------------------------------- /docs/source/getting_started.rst: -------------------------------------------------------------------------------- 1 | Getting Started 2 | =============== 3 | 4 | Development Setup 5 | ----------------- 6 | 7 | .. toctree:: 8 | :maxdepth: 2 9 | 10 | setup_osx 11 | setup_docker 12 | -------------------------------------------------------------------------------- /docs/source/images/case-a.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/docs/source/images/case-a.webp -------------------------------------------------------------------------------- /docs/source/images/case-abcd.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/docs/source/images/case-abcd.webp -------------------------------------------------------------------------------- /docs/source/images/case-b.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/docs/source/images/case-b.webp -------------------------------------------------------------------------------- /docs/source/images/case-c.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/docs/source/images/case-c.webp -------------------------------------------------------------------------------- /docs/source/images/case-d.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/docs/source/images/case-d.webp -------------------------------------------------------------------------------- /docs/source/images/data-model.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/docs/source/images/data-model.webp -------------------------------------------------------------------------------- /docs/source/license.rst: -------------------------------------------------------------------------------- 1 | ============== 2 | License 3 | ============== 4 | 5 | .. include:: ../../LICENSE.md 6 | -------------------------------------------------------------------------------- /docs/source/modules.rst: -------------------------------------------------------------------------------- 1 | ========= 2 | Modules 3 | ========= 4 | 5 | .. toctree:: 6 | :maxdepth: 3 7 | 8 | modules/config 9 | modules/seed.cleansing 10 | modules/seed.data 11 | modules/seed.data_importer 12 | modules/seed.features 13 | modules/seed.landing 14 | modules/seed.lib 15 | modules/seed.lib.mappings 16 | modules/seed.lib.merging 17 | modules/seed.mappings 18 | modules/seed.managers 19 | modules/seed.models 20 | modules/seed.public 21 | modules/seed 22 | modules/seed.serializers 23 | modules/seed.tests 24 | modules/seed.urls 25 | modules/seed.utils 26 | modules/seed.views 27 | -------------------------------------------------------------------------------- /docs/source/modules/seed.cleansing.rst: -------------------------------------------------------------------------------- 1 | Data Quality Package 2 | ==================== 3 | 4 | Inheritance 5 | ----------- 6 | 7 | .. inheritance-diagram:: seed.data_quality.models 8 | :parts: 2 9 | 10 | Submodules 11 | ---------- 12 | 13 | Models 14 | ------ 15 | 16 | .. automodule:: seed.models.data_quality 17 | :members: 18 | :undoc-members: 19 | :show-inheritance: 20 | 21 | Tests 22 | ----- 23 | 24 | .. automodule:: seed.tests.data_quality 25 | :members: 26 | :undoc-members: 27 | :show-inheritance: 28 | 29 | Views 30 | ----- 31 | 32 | .. automodule:: seed.views.data_quality 33 | :members: 34 | :undoc-members: 35 | :show-inheritance: 36 | -------------------------------------------------------------------------------- /docs/source/modules/seed.data.rst: -------------------------------------------------------------------------------- 1 | Data Package 2 | ============ 3 | 4 | Submodules 5 | ---------- 6 | 7 | BEDES 8 | ----- 9 | 10 | .. automodule:: seed.data.bedes 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | 16 | Module contents 17 | --------------- 18 | 19 | .. automodule:: seed.data 20 | :members: 21 | :undoc-members: 22 | :show-inheritance: 23 | -------------------------------------------------------------------------------- /docs/source/modules/seed.features.rst: -------------------------------------------------------------------------------- 1 | Features Package 2 | ================ 3 | 4 | Submodules 5 | ---------- 6 | 7 | .. Steps 8 | .. -------------------------- 9 | 10 | .. .. automodule:: seed.features.steps 11 | .. :members: 12 | .. :undoc-members: 13 | .. :show-inheritance: 14 | 15 | 16 | Module contents 17 | --------------- 18 | 19 | .. automodule:: seed.features 20 | :members: 21 | :undoc-members: 22 | :show-inheritance: 23 | -------------------------------------------------------------------------------- /docs/source/modules/seed.landing.management.commands.rst: -------------------------------------------------------------------------------- 1 | Landing Management Package 2 | ========================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | Update EULA 8 | ----------- 9 | 10 | .. automodule:: seed.landing.management.commands.update_eula 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | 16 | Module contents 17 | --------------- 18 | 19 | .. automodule:: seed.landing.management.commands 20 | :members: 21 | :undoc-members: 22 | :show-inheritance: 23 | -------------------------------------------------------------------------------- /docs/source/modules/seed.landing.management.rst: -------------------------------------------------------------------------------- 1 | seed.landing.management package 2 | =============================== 3 | 4 | Subpackages 5 | ----------- 6 | 7 | .. toctree:: 8 | 9 | seed.landing.management.commands 10 | 11 | Module contents 12 | --------------- 13 | 14 | .. automodule:: seed.landing.management 15 | :members: 16 | :undoc-members: 17 | :show-inheritance: 18 | -------------------------------------------------------------------------------- /docs/source/modules/seed.lib.merging.rst: -------------------------------------------------------------------------------- 1 | seed.lib.merging package 2 | ======================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | seed.lib.merging.merging module 8 | ------------------------------- 9 | 10 | .. automodule:: seed.lib.merging.merging 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | 16 | Module contents 17 | --------------- 18 | 19 | .. automodule:: seed.lib.merging 20 | :members: 21 | :undoc-members: 22 | :show-inheritance: 23 | -------------------------------------------------------------------------------- /docs/source/modules/seed.lib.rst: -------------------------------------------------------------------------------- 1 | Library Packages 2 | ================ 3 | 4 | Submodules 5 | ---------- 6 | 7 | Module contents 8 | --------------- 9 | 10 | .. automodule:: seed.lib 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | .. automodule:: seed.lib.mappings 16 | :members: 17 | :undoc-members: 18 | :show-inheritance: 19 | 20 | .. automodule:: seed.lib.merging 21 | :members: 22 | :undoc-members: 23 | :show-inheritance: 24 | -------------------------------------------------------------------------------- /docs/source/modules/seed.management.rst: -------------------------------------------------------------------------------- 1 | Management Package 2 | ================== 3 | 4 | Subpackages 5 | ----------- 6 | 7 | .. toctree:: 8 | 9 | seed.management.commands 10 | 11 | Module contents 12 | --------------- 13 | 14 | .. automodule:: seed.management 15 | :members: 16 | :undoc-members: 17 | :show-inheritance: 18 | -------------------------------------------------------------------------------- /docs/source/modules/seed.managers.rst: -------------------------------------------------------------------------------- 1 | Managers Package 2 | ================ 3 | 4 | Subpackages 5 | ----------- 6 | 7 | .. toctree:: 8 | 9 | seed.managers.tests 10 | 11 | Submodules 12 | ---------- 13 | 14 | JSON 15 | ---- 16 | 17 | .. automodule:: seed.managers.json 18 | :members: 19 | :undoc-members: 20 | :show-inheritance: 21 | 22 | 23 | Module contents 24 | --------------- 25 | 26 | .. automodule:: seed.managers 27 | :members: 28 | :undoc-members: 29 | :show-inheritance: 30 | -------------------------------------------------------------------------------- /docs/source/modules/seed.managers.tests.rst: -------------------------------------------------------------------------------- 1 | Manager Tests Package 2 | ===================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | Test JSON Manager 8 | ----------------- 9 | 10 | .. automodule:: seed.managers.tests.test_json_manager 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | 16 | Module contents 17 | --------------- 18 | 19 | .. automodule:: seed.managers.tests 20 | :members: 21 | :undoc-members: 22 | :show-inheritance: 23 | -------------------------------------------------------------------------------- /docs/source/modules/seed.public.rst: -------------------------------------------------------------------------------- 1 | Public Package 2 | ============== 3 | 4 | Submodules 5 | ---------- 6 | 7 | Models 8 | ------ 9 | 10 | .. automodule:: seed.public.models 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | 16 | Module contents 17 | --------------- 18 | 19 | .. automodule:: seed.public 20 | :members: 21 | :undoc-members: 22 | :show-inheritance: 23 | -------------------------------------------------------------------------------- /docs/source/modules/seed.serializers.rst: -------------------------------------------------------------------------------- 1 | Serializers Package 2 | =================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | Serializers 8 | ----------- 9 | 10 | .. automodule:: seed.serializers.celery 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | Labels 16 | ------ 17 | 18 | .. automodule:: seed.serializers.labels 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | 23 | 24 | Module contents 25 | --------------- 26 | 27 | .. automodule:: seed.serializers 28 | :members: 29 | :undoc-members: 30 | :show-inheritance: 31 | -------------------------------------------------------------------------------- /docs/source/modules/seed.templatetags.rst: -------------------------------------------------------------------------------- 1 | Templatetags Package 2 | ========================= 3 | 4 | Submodules 5 | ---------- 6 | 7 | Breadcrumbs 8 | ----------- 9 | 10 | .. automodule:: seed.templatetags.breadcrumbs 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | -------------------------------------------------------------------------------- /docs/source/modules/seed.test_helpers.factory.lib.rst: -------------------------------------------------------------------------------- 1 | Test Helper Factory Lib Package 2 | =============================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | Chomsky 8 | ------- 9 | 10 | .. automodule:: seed.test_helpers.factory.lib.chomsky 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | -------------------------------------------------------------------------------- /docs/source/modules/seed.test_helpers.factory.rst: -------------------------------------------------------------------------------- 1 | Test Helper Factor Package 2 | ========================== 3 | 4 | Subpackages 5 | ----------- 6 | 7 | .. toctree:: 8 | 9 | seed.test_helpers.factory.lib 10 | 11 | Submodules 12 | ---------- 13 | 14 | Helpers 15 | ------- 16 | 17 | .. automodule:: seed.test_helpers.factory.helpers 18 | :members: 19 | :undoc-members: 20 | :show-inheritance: 21 | -------------------------------------------------------------------------------- /docs/source/modules/seed.test_helpers.rst: -------------------------------------------------------------------------------- 1 | Test Helpers Package 2 | ==================== 3 | 4 | Subpackages 5 | ----------- 6 | 7 | .. toctree:: 8 | 9 | seed.test_helpers.factory 10 | 11 | Module contents 12 | --------------- 13 | 14 | .. automodule:: seed.test_helpers 15 | :members: 16 | :undoc-members: 17 | :show-inheritance: 18 | -------------------------------------------------------------------------------- /docs/source/modules/seed.tests.functional.rst: -------------------------------------------------------------------------------- 1 | Tests (Functional) Package 2 | ========================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | Base 8 | ---- 9 | .. automodule:: seed.functional.tests.base 10 | :members: 11 | 12 | Page 13 | ---- 14 | .. automodule:: seed.functional.tests.page 15 | :members: 16 | 17 | Pages 18 | ----- 19 | .. automodule:: seed.functional.tests.pages 20 | :members: 21 | :show-inheritance: 22 | -------------------------------------------------------------------------------- /docs/source/modules/seed.urls.rst: -------------------------------------------------------------------------------- 1 | URLs Package 2 | ============ 3 | 4 | Submodules 5 | ---------- 6 | 7 | Accounts 8 | -------- 9 | 10 | .. automodule:: seed.urls.accounts 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | APIs 16 | ---- 17 | 18 | .. automodule:: seed.urls.api 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | 23 | Main 24 | ---- 25 | 26 | .. automodule:: seed.urls.main 27 | :members: 28 | :undoc-members: 29 | :show-inheritance: 30 | -------------------------------------------------------------------------------- /docs/source/modules/seed.utils.rst: -------------------------------------------------------------------------------- 1 | Utilities Package 2 | ================= 3 | 4 | Submodules 5 | ---------- 6 | 7 | APIs 8 | ---- 9 | 10 | .. automodule:: seed.utils.api 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | Buildings 16 | --------- 17 | 18 | .. automodule:: seed.utils.buildings 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | 23 | Organizations 24 | ------------- 25 | 26 | .. automodule:: seed.utils.organizations 27 | :members: 28 | :undoc-members: 29 | :show-inheritance: 30 | 31 | Time 32 | ---- 33 | 34 | .. automodule:: seed.utils.time 35 | :members: 36 | :undoc-members: 37 | :show-inheritance: 38 | -------------------------------------------------------------------------------- /locale/en_US/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/locale/en_US/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/es/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/locale/es/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/fr_CA/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/locale/fr_CA/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /log/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/log/.gitkeep -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """ 3 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 4 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 5 | """ 6 | 7 | import os 8 | import sys 9 | 10 | if __name__ == "__main__": 11 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.dev") 12 | 13 | from django.core.management import execute_from_command_line 14 | 15 | execute_from_command_line(sys.argv) 16 | -------------------------------------------------------------------------------- /mypy.ini: -------------------------------------------------------------------------------- 1 | [mypy] 2 | ignore_missing_imports = True 3 | exclude = (?x)( 4 | ^docs\/source\/conf\.py$ 5 | | ^seed\/tests\/test_search\.py$ 6 | | ^venv\/.*$ 7 | ) 8 | 9 | [mypy-seed.*.migrations.*] 10 | ignore_errors = True 11 | 12 | [mypy-config.settings.*] 13 | ignore_errors = True 14 | -------------------------------------------------------------------------------- /ng_seed/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/ng_seed/__init__.py -------------------------------------------------------------------------------- /pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | DJANGO_SETTINGS_MODULE = config.settings.test 3 | python_files = tests.py test_*.py *_tests.py 4 | addopts = --ignore=seed/tests/api/test_seed_host_api.py --reuse-db 5 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # This file is here because many Platforms as a Service look for 2 | # requirements.txt in the root directory of a project. 3 | -r requirements/aws.txt 4 | -------------------------------------------------------------------------------- /requirements/aws.txt: -------------------------------------------------------------------------------- 1 | -r base.txt 2 | boto3==1.40.30 3 | django-ses==4.4.0 4 | uWSGI==2.0.30; sys_platform != "win32" 5 | -------------------------------------------------------------------------------- /requirements/local.txt: -------------------------------------------------------------------------------- 1 | # Local development dependencies go here 2 | -r test.txt 3 | django-debug-toolbar==6.0.0 4 | -------------------------------------------------------------------------------- /seed/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | # This will make sure the app is always imported when 7 | # Django starts so that shared_task will use this app. 8 | from .celery import app as celery_app 9 | 10 | __all__ = ("celery_app",) 11 | -------------------------------------------------------------------------------- /seed/admin.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from django.contrib import admin 7 | 8 | from seed.models import Column, Cycle, Property, PropertyState, PropertyView, TaxLot, TaxLotProperty, TaxLotState, TaxLotView 9 | 10 | admin.site.register(Column) 11 | admin.site.register(Property) 12 | admin.site.register(PropertyView) 13 | admin.site.register(PropertyState) 14 | admin.site.register(Cycle) 15 | admin.site.register(TaxLot) 16 | admin.site.register(TaxLotView) 17 | admin.site.register(TaxLotState) 18 | admin.site.register(TaxLotProperty) 19 | -------------------------------------------------------------------------------- /seed/analysis_pipelines/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/analysis_pipelines/better/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from seed.analysis_pipelines.better.pipeline import ( # noqa: F401 7 | BETTERPipeline, 8 | _finish_analysis, 9 | _finish_preparation, 10 | _prepare_all_properties, 11 | _start_analysis, 12 | ) 13 | -------------------------------------------------------------------------------- /seed/api/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/api/base/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/api/v3/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/api/v4/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/audit_template/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/building_sync/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/building_sync/lib/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/building_sync/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/building_sync/tests/data/ExportedData.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/building_sync/tests/data/ExportedData.xlsx -------------------------------------------------------------------------------- /seed/building_sync/tests/data/ex1_no_schemaLocation_and_ex_1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/building_sync/tests/data/ex1_no_schemaLocation_and_ex_1.zip -------------------------------------------------------------------------------- /seed/building_sync/tests/data/ex_1_and_buildingsync_ex01_measures.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/building_sync/tests/data/ex_1_and_buildingsync_ex01_measures.zip -------------------------------------------------------------------------------- /seed/celery.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """ 3 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 4 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 5 | """ 6 | 7 | import os 8 | 9 | import celery 10 | from django.conf import settings 11 | 12 | # set the default Django settings module for the 'celery' program. 13 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.dev") 14 | 15 | app = celery.Celery("seed") 16 | app.config_from_object("django.conf:settings", namespace="CELERY") 17 | app.autodiscover_tasks(lambda: (*settings.SEED_CORE_APPS, "seed.analysis_pipelines")) 18 | 19 | if __name__ == "__main__": 20 | app.start() 21 | -------------------------------------------------------------------------------- /seed/context_processors.py: -------------------------------------------------------------------------------- 1 | from django.core.cache import cache 2 | 3 | 4 | def global_vars(_request): 5 | method_2fa = cache.get("method_2fa") 6 | user_email = cache.get("user_email") 7 | return {"method_2fa": method_2fa, "user_email": user_email} 8 | -------------------------------------------------------------------------------- /seed/data_importer/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0002_auto_20160218_1335.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations, models 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("data_importer", "0001_initial"), 7 | ] 8 | 9 | operations = [ 10 | migrations.AlterField( 11 | model_name="importrecord", 12 | name="mcm_version", 13 | field=models.IntegerField(null=True, blank=True), 14 | ), 15 | ] 16 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0003_merge.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("data_importer", "0002_auto_20160302_1142"), 7 | ("data_importer", "0002_auto_20160218_1335"), 8 | ] 9 | 10 | operations = [] 11 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0005_importfile_cycle.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-09-27 21:23 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0034_merge"), 9 | ("data_importer", "0004_auto_20160411_1139"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="importfile", 15 | name="cycle", 16 | field=models.ForeignKey(blank=True, null=True, on_delete=models.deletion.CASCADE, to="seed.Cycle"), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0007_auto_20161008_2244.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-10-09 05:44 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("data_importer", "0006_auto_20161007_0317"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="importfile", 14 | name="cycle", 15 | field=models.ForeignKey(blank=True, null=True, on_delete=models.deletion.CASCADE, to="seed.Cycle"), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0008_importfile_cached_mapped_columns.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-12-09 17:47 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("data_importer", "0007_auto_20161008_2244"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="importfile", 14 | name="cached_mapped_columns", 15 | field=models.TextField(blank=True, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0009_importfile_uploaded_filename.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-01-05 21:51 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("data_importer", "0008_importfile_cached_mapped_columns"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="importfile", 14 | name="uploaded_filename", 15 | field=models.CharField(blank=True, max_length=255), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0010_importfile_matching_results_data.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2018-07-13 15:15 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("data_importer", "0009_importfile_uploaded_filename"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="importfile", 14 | name="matching_results_data", 15 | field=models.JSONField(blank=True, default=dict), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0013_importfile_raw_property_state_to_filename.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.10 on 2020-04-28 23:38 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("data_importer", "0012_auto_20181107_0904"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="importfile", 14 | name="raw_property_state_to_filename", 15 | field=models.JSONField(blank=True, default=dict), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0014_importfile_has_generated_headers.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2020-09-11 15:02 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("data_importer", "0013_importfile_raw_property_state_to_filename"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="importfile", 14 | name="has_generated_headers", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0015_auto_20210712_2134.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-07-12 21:34 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("data_importer", "0014_importfile_has_generated_headers"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterModelOptions( 13 | name="importfile", 14 | options={"ordering": ("-modified", "-created")}, 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/0018_importfile_multiple_cycle_upload.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.19 on 2023-06-09 14:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("data_importer", "0017_pm_source_type"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="importfile", 14 | name="multiple_cycle_upload", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/data_importer/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/data_importer/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/data_importer/tests/data/MultiCycle_Test.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/MultiCycle_Test.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-properties-2-invalid-footprints.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-properties-2-invalid-footprints.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-properties-duplicate-headers.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-properties-duplicate-headers.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-properties-duplicates.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-properties-duplicates.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-properties-missing-headers.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-properties-missing-headers.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-properties-postal.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-properties-postal.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-properties-small-changes.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-properties-small-changes.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-properties-unicode.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-properties-unicode.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-properties.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-properties.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-taxlots-1-invalid-footprint.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-taxlots-1-invalid-footprint.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-taxlots-2-invalid-footprints.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-taxlots-2-invalid-footprints.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-taxlots-small-changes.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-taxlots-small-changes.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-data-taxlots.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-data-taxlots.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-pm-data-request-with-meters-new-format.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-pm-data-request-with-meters-new-format.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-pm-data-request-with-meters.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-pm-data-request-with-meters.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-pm-monthly-meter-usage-1-dup.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-pm-monthly-meter-usage-1-dup.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-pm-monthly-meter-usage-2-cost-meters.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-pm-monthly-meter-usage-2-cost-meters.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-pm-monthly-meter-usage-with-unknown-types-and-units.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-pm-monthly-meter-usage-with-unknown-types-and-units.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-pm-monthly-meter-usage.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-pm-monthly-meter-usage.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/data/example-pm-properties.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/data_importer/tests/data/example-pm-properties.xlsx -------------------------------------------------------------------------------- /seed/data_importer/tests/integration/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/docs/faq/features/irregular-data-updates.md: -------------------------------------------------------------------------------- 1 | --- 2 | question: Do you anticipate any SEED issues if there are irregular data updates for each building? For example, with a point-of-sale benchmarking program, building data would only be updated when a property is sold. 3 | tags: [] 4 | --- 5 | 6 | There should not be any issues importing data at non-regular times; users frequently do so with ENERGY STAR Portfolio Manager data. 7 | -------------------------------------------------------------------------------- /seed/docs/faq/features/linking-paired-properties.md: -------------------------------------------------------------------------------- 1 | --- 2 | question: How does linking interact with paired properties and tax lots? 3 | tags: [feature, inventory management] 4 | --- 5 | 6 | At the moment, paired property and tax lot relationships are displayed and managed separately from linked relationships. That is, paired records are viewed and managed in a separate area of SEED as linked records. 7 | -------------------------------------------------------------------------------- /seed/docs/faq/features/verify-geocode.md: -------------------------------------------------------------------------------- 1 | --- 2 | question: I just geocoded my data using SEED. How do I review and verify the results? 3 | tags: [features, geocoding] 4 | --- 5 | 6 | There are multiple ways of verifying geocoding results. The most obvious way is to verify that latitude and longitude fields are populated. Additionally, SEED provides a field called "Geocoding Confidence". This field can provide evidence of how the geocoding went for that record - a value starting with "Low..." indicates that geocoding failed for a record because the address values didn't yield reliable results. Finally, SEED provides an inventory map page that allows you to view where the points are located on a map. 7 | -------------------------------------------------------------------------------- /seed/docs/faq/general/resources.md: -------------------------------------------------------------------------------- 1 | --- 2 | question: What resources or support do you provide to jurisdictions interested in using SEED as part of a benchmarking program? 3 | tags: [] 4 | --- 5 | 6 | We typically provide technical support as needed and within reason. As the community grows, there are more users able to provide support. It is recommended to use [GitHub issues](https://github.com/SEED-platform/seed/issues) to a) view existing feature requests and issues, and b) communicate with various developers. 7 | -------------------------------------------------------------------------------- /seed/docs/faq/hosting/local-network.md: -------------------------------------------------------------------------------- 1 | --- 2 | question: Can the web interface of a self-hosted SEED instance be accessed via a local network, or is internet access required? Can access via local internet be disabled? 3 | tags: [] 4 | --- 5 | 6 | Access via public internet would be a function of the self-hosted instance's network configuration. If SEED is hosted on Amazon Web Services, for example, the host can deny access based on CIDR blocks (IP address ranges) in the Amazon Web Services Console. If the application is hosted on user-owned infrastructure, a local firewall can prevent external access. Note that internal access in both cases would still be available (i.e., the web interface would be accessible). 7 | -------------------------------------------------------------------------------- /seed/docs/faq/industry involvement/building-construction-permits.md: -------------------------------------------------------------------------------- 1 | --- 2 | question: Do any applications use SEED to store and analyze building construction permit applications for energy code compliance? 3 | tags: [] 4 | --- 5 | 6 | We are not aware of any applications which use SEED to do this, although SEED could be linked to another tool, like SalesForce. We recommend contacting Earth Advantage and Clearly Energy for more details (see the [technical allies page](https://seed-platform.org/technical_ally/)). 7 | -------------------------------------------------------------------------------- /seed/docs/faq/security/encryption.md: -------------------------------------------------------------------------------- 1 | --- 2 | question: Can you suggest any encryption solutions, since the SEED software does not encrypt its database? 3 | tags: [] 4 | --- 5 | 6 | We recommend hard drive encryption of the database server as the easiest solution; encrypting locally is more complicated but certainly doable. 7 | -------------------------------------------------------------------------------- /seed/docs/faq/security/ssl.md: -------------------------------------------------------------------------------- 1 | --- 2 | question: How does SEED secure internet data communications? 3 | tags: [] 4 | --- 5 | 6 | Secure sockets layer (SSL) protocols must be configured on the hosted instance. This requires purchasing and adding certificates to the deployed server, or using a third-party service (e.g., CloudFlare or Cloudfront) to manage the domain name system (DNS) and the SSL certificates. 7 | -------------------------------------------------------------------------------- /seed/docs/static/docs/images/mapping_diagram.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/docs/static/docs/images/mapping_diagram.webp -------------------------------------------------------------------------------- /seed/docs/urls.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from django.urls import path 7 | 8 | from seed.docs.views import faq_page 9 | 10 | urlpatterns = [ 11 | path("", faq_page, name="documentation"), 12 | ] 13 | -------------------------------------------------------------------------------- /seed/hpxml/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/hpxml/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/landing/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/landing/migrations/0002_auto_20151105_1539.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations, models 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("landing", "0001_initial"), 7 | ] 8 | 9 | operations = [ 10 | migrations.AlterField( 11 | model_name="seeduser", 12 | name="default_custom_columns", 13 | field=models.JSONField(default={}), 14 | preserve_default=True, 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/landing/migrations/0003_seeduser_default_building_detail_custom_columns.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations, models 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("landing", "0002_auto_20151105_1539"), 7 | ] 8 | 9 | operations = [ 10 | migrations.AddField( 11 | model_name="seeduser", 12 | name="default_building_detail_custom_columns", 13 | field=models.JSONField(default={}), 14 | preserve_default=True, 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/landing/migrations/0004_auto_20160316_1102.py: -------------------------------------------------------------------------------- 1 | import django.db.models.deletion 2 | from django.db import migrations, models 3 | 4 | 5 | class Migration(migrations.Migration): 6 | dependencies = [ 7 | ("landing", "0003_seeduser_default_building_detail_custom_columns"), 8 | ] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="seeduser", 13 | name="default_organization", 14 | field=models.ForeignKey( 15 | related_name="default_users", on_delete=django.db.models.deletion.SET_NULL, blank=True, to="orgs.Organization", null=True 16 | ), 17 | preserve_default=True, 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /seed/landing/migrations/0005_merge.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("landing", "0004_auto_20160316_1102"), 7 | ("landing", "0004_auto_20160218_1335"), 8 | ] 9 | 10 | operations = [] 11 | -------------------------------------------------------------------------------- /seed/landing/migrations/0006_auto_20170602_1648.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-06-02 23:48 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("landing", "0005_merge"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="seeduser", 14 | name="default_building_detail_custom_columns", 15 | field=models.JSONField(default=dict), 16 | ), 17 | migrations.AlterField( 18 | model_name="seeduser", 19 | name="default_custom_columns", 20 | field=models.JSONField(default=dict), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /seed/landing/migrations/0007_auto_20181107_0904.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.16 on 2018-11-07 17:04 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("landing", "0006_auto_20170602_1648"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="seeduser", 14 | name="api_key", 15 | field=models.CharField(blank=True, db_index=True, default="", max_length=128, verbose_name="api key"), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/landing/migrations/0008_seeduser_prompt_2fa.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-04-19 20:19 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("landing", "0007_auto_20181107_0904"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="seeduser", 14 | name="prompt_2fa", 15 | field=models.BooleanField(default=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/landing/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/landing/serializers.py: -------------------------------------------------------------------------------- 1 | from rest_framework_simplejwt.serializers import TokenObtainPairSerializer 2 | 3 | 4 | class SeedTokenObtainPairSerializer(TokenObtainPairSerializer): 5 | @classmethod 6 | def get_token(cls, user): 7 | token = super().get_token(user) 8 | 9 | # Add custom claims 10 | # token["name"] = f"{user.first_name} {user.last_name}".strip() 11 | 12 | return token 13 | -------------------------------------------------------------------------------- /seed/landing/static/landing/images/landing/bg-paper.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/landing/static/landing/images/landing/bg-paper.webp -------------------------------------------------------------------------------- /seed/landing/static/landing/images/landing/landing-bg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/landing/static/landing/images/landing/landing-bg.webp -------------------------------------------------------------------------------- /seed/landing/templates/landing/_password_note.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 |

{% trans "Note: Passwords must be 8 or more characters, and must contain at least 1 uppercase character, 1 lowercase character, and 1 digit." %}

4 | -------------------------------------------------------------------------------- /seed/landing/templates/landing/base.html: -------------------------------------------------------------------------------- 1 | {% extends "seed/base.html" %} 2 | {% load compress %} 3 | {% load i18n %} 4 | 5 | {% block css %} 6 | {% compress css file landing %} 7 | {% include "seed/_fonts.html" %} 8 | 9 | 10 | {% endcompress %} 11 | {% endblock %} 12 | {% block title %} 13 | {% trans "SEED Platform™" %} 14 | {% endblock %} 15 | 16 | {% block js %} 17 | {{ block.super }} 18 | {% endblock %} 19 | 20 | {% block body %} 21 | {% block content %}{% endblock %} 22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /seed/landing/templates/landing/password_reset_email.html: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% autoescape off %} 2 | {% trans "You're receiving this email because you requested a password reset" %} 3 | {% blocktrans %}for your SEED Platform™ user account{% endblocktrans %}. 4 | 5 | {% trans "Please go to the following page and choose a new password:" %} 6 | {% block reset_link %} 7 | {{ protocol }}://{{ domain }}{% url "password_reset_confirm" uidb64=uid token=token %} 8 | {% endblock %} 9 | {% trans "Your username, in case you've forgotten:" %} {{ user.email }} 10 | 11 | {% blocktrans %}The SEED team{% endblocktrans %} 12 | 13 | {% endautoescape %} 14 | -------------------------------------------------------------------------------- /seed/landing/templates/landing/password_reset_forced_email.html: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% autoescape off %} 2 | {% trans "You're receiving this e-mail because your password was reset" %} 3 | {% blocktrans %}for your SEED Platform™ user account{% endblocktrans %}. 4 | 5 | {% trans "Please go to the following page and choose a new password:" %} 6 | {% block reset_link %} 7 | {{ protocol }}://{{ domain }}{% url "password_reset_confirm" uidb64=uid token=token %} 8 | {% endblock %} 9 | {% trans "Your username, in case you've forgotten:" %} {{ user.email }} 10 | 11 | {% blocktrans %}The SEED team{% endblocktrans %} 12 | 13 | {% endautoescape %} 14 | -------------------------------------------------------------------------------- /seed/landing/templates/landing/password_reset_subject.txt: -------------------------------------------------------------------------------- 1 | {% autoescape off %}{% load i18n %}{% trans "Password reset on SEED" %}{% endautoescape %} 2 | -------------------------------------------------------------------------------- /seed/landing/templates/two_factor/_base_focus.html: -------------------------------------------------------------------------------- 1 | {% extends "two_factor/_base.html" %}{% load i18n %} 2 | 3 | {% block content%} 4 |
5 |
6 | {% include "landing/_marketing_bullets.html" %} 7 |
8 |
9 |

{% trans "Log in to SEED Platform™" %}

10 |
11 | 12 | {% block content_inner %}{% endblock %} 13 |
14 |
15 |
16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /seed/landing/templates/two_factor/_wizard_actions.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 | {% if cancel_url %} 4 | {% trans "Cancel" %} 6 | {% endif %} 7 |
8 | {% if wizard.steps.prev %} 9 | 12 | {% endif %} 13 | 20 |
21 | -------------------------------------------------------------------------------- /seed/landing/templates/two_factor/_wizard_forms.html: -------------------------------------------------------------------------------- 1 | 2 | {{ wizard.management_form }} 3 | {{ wizard.form.as_table }} 4 |
5 | {% block js %} 6 | 16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /seed/landing/templates/two_factor/twilio/sms_message.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% blocktrans trimmed %} 3 | Your OTP token is {{ token }} 4 | {% endblocktrans %} 5 | -------------------------------------------------------------------------------- /seed/lib/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/geospatial/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/geospatial/data/Multifamily_Properties_-_Assisted.csv.xz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/lib/geospatial/data/Multifamily_Properties_-_Assisted.csv.xz -------------------------------------------------------------------------------- /seed/lib/geospatial/data/Public_Housing_Developments.csv.xz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/lib/geospatial/data/Public_Housing_Developments.csv.xz -------------------------------------------------------------------------------- /seed/lib/geospatial/data/cejst-1.0-communities.csv.xz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/lib/geospatial/data/cejst-1.0-communities.csv.xz -------------------------------------------------------------------------------- /seed/lib/geospatial/data/test-Multifamily_Properties_-_Assisted.csv.xz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/lib/geospatial/data/test-Multifamily_Properties_-_Assisted.csv.xz -------------------------------------------------------------------------------- /seed/lib/geospatial/data/test-Public_Housing_Developments.csv.xz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/lib/geospatial/data/test-Public_Housing_Developments.csv.xz -------------------------------------------------------------------------------- /seed/lib/geospatial/data/test-cejst-1.0-communities.csv.xz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/lib/geospatial/data/test-cejst-1.0-communities.csv.xz -------------------------------------------------------------------------------- /seed/lib/mappings/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/mappings/data/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/mcm/.gitignore: -------------------------------------------------------------------------------- 1 | *.py[cod] 2 | *.swp 3 | *.swo 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Packages 9 | *.egg 10 | *.egg-info 11 | dist 12 | build 13 | eggs 14 | parts 15 | bin 16 | var 17 | sdist 18 | develop-eggs 19 | .installed.cfg 20 | lib 21 | lib64 22 | __pycache__ 23 | 24 | # Installer logs 25 | pip-log.txt 26 | 27 | # Unit test / coverage reports 28 | .coverage 29 | .tox 30 | 31 | # Translations 32 | *.mo 33 | 34 | # Mr Developer 35 | .mr.developer.cfg 36 | .project 37 | .pydevproject 38 | -------------------------------------------------------------------------------- /seed/lib/mcm/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | VERSION = (0, 0, 1) 7 | 8 | """ 9 | This is the Map, Clean, Merge application for SEED 10 | 11 | Its purpose is to create a modular, flexible, and parallelizable 12 | way to parse tabular data and group data into appropriate ontologies, 13 | leaving everything else in an ontology by itself. 14 | 15 | """ 16 | -------------------------------------------------------------------------------- /seed/lib/mcm/data/SEED/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/mcm/data/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/mcm/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/mcm/tests/test_data/test_csv.csv: -------------------------------------------------------------------------------- 1 | column 1,column 2,column 3,column 4,column 5,column 6 2 | 1,2,3,4,5,6 3 | 7,8,9,10,11,12 4 | -------------------------------------------------------------------------------- /seed/lib/mcm/tests/test_data/test_espm.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/lib/mcm/tests/test_data/test_espm.xls -------------------------------------------------------------------------------- /seed/lib/mcm/tests/test_data/test_espm.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/lib/mcm/tests/test_data/test_espm.xlsx -------------------------------------------------------------------------------- /seed/lib/mcm/tests/test_data/test_espm_blank_rows.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/lib/mcm/tests/test_data/test_espm_blank_rows.xls -------------------------------------------------------------------------------- /seed/lib/mcm/tests/test_data/test_espm_date_format.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/lib/mcm/tests/test_data/test_espm_date_format.xlsx -------------------------------------------------------------------------------- /seed/lib/mcm/tests/test_data/test_missing_headers.csv: -------------------------------------------------------------------------------- 1 | column 1,column 2,,column 4,,column 6 2 | 1,2,3,4,5,6 3 | 7,8,9,10,11,12 4 | -------------------------------------------------------------------------------- /seed/lib/merging/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/merging/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/progress_data/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/progress_data/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/superperms/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/exceptions.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | 7 | class TooManyNestedOrgsError(Exception): 8 | """We only support one level of nesting.""" 9 | 10 | 11 | class UserNotInOrganizationError(Exception): 12 | """Raised when a user does not exist, or does not belong to an org.""" 13 | 14 | 15 | class InsufficientPermissionError(Exception): 16 | """Raised when a user attempts an action for which they're not allowed.""" 17 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0005_merge_20180110_1156.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2018-01-10 19:56 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0004_auto_20171120_1158"), 9 | ("orgs", "0004_auto_20180106_2123"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0006_organization_display_significant_figures.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2018-01-23 22:15 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0005_merge_20180110_1156"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organization", 14 | name="display_significant_figures", 15 | field=models.PositiveSmallIntegerField(default=2), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0008_organization_mapquest_api_key.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.16 on 2019-01-07 21:46 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0007_auto_20181107_0904"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organization", 14 | name="mapquest_api_key", 15 | field=models.CharField(blank=True, default="", max_length=128), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0012_auto_20200327_1213.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.10 on 2020-03-27 19:13 2 | 3 | from django.db import migrations, models 4 | 5 | import seed.lib.superperms.orgs.models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | dependencies = [ 10 | ("orgs", "0011_auto_20190714_2159"), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name="organization", 16 | name="display_meter_units", 17 | field=models.JSONField(default=seed.lib.superperms.orgs.models._get_default_meter_units), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0013_organization_comstock_enabled.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.10 on 2020-06-03 23:24 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0012_auto_20200327_1213"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organization", 14 | name="comstock_enabled", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0014_organization_geocoding_enabled.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2020-11-11 20:26 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0013_organization_comstock_enabled"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organization", 14 | name="geocoding_enabled", 15 | field=models.BooleanField(default=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0015_organization_property_display_field.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2021-01-26 19:05 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0014_organization_geocoding_enabled"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organization", 14 | name="property_display_field", 15 | field=models.CharField(default="address_line_1", max_length=32), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0016_organization_taxlot_display_field.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2021-01-28 20:14 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0015_organization_property_display_field"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organization", 14 | name="taxlot_display_field", 15 | field=models.CharField(default="address_line_1", max_length=32), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0019_organization_better_analysis_api_key.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.24 on 2021-07-29 20:31 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0018_update_organization_display_meter_units"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organization", 14 | name="better_analysis_api_key", 15 | field=models.CharField(blank=True, default="", max_length=128), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0020_rename_display_significant_figures_organization_display_decimal_places.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.7 on 2021-10-27 20:50 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0019_organization_better_analysis_api_key"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RenameField( 13 | model_name="organization", 14 | old_name="display_significant_figures", 15 | new_name="display_decimal_places", 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0024_salesforce_configurations.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.16 on 2023-01-17 21:53 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0023_auto_20220721_1851"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organization", 14 | name="salesforce_enabled", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0026_organizationuser_unique_user_for_organization.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.18 on 2023-05-08 20:24 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0025_remove_duplicate_users_for_org"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddConstraint( 13 | model_name="organizationuser", 14 | constraint=models.UniqueConstraint(fields=("user", "organization"), name="unique_user_for_organization"), 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0033_organization_public_geojson_enabled.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-05-13 16:34 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0032_organization_public_feed"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organization", 14 | name="public_geojson_enabled", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0035_organization_require_2fa.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-05-29 19:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0034_org_audit_template_fields"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organization", 14 | name="require_2fa", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0036_organization_display_meter_water_units.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-07-17 16:56 2 | 3 | from django.db import migrations, models 4 | 5 | import seed.lib.superperms.orgs.models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | dependencies = [ 10 | ("orgs", "0035_organization_require_2fa"), 11 | ] 12 | 13 | operations = [ 14 | migrations.AddField( 15 | model_name="organization", 16 | name="display_meter_water_units", 17 | field=models.JSONField(default=seed.lib.superperms.orgs.models._get_default_meter_water_units), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/0042_organizationuser_settings.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2025-03-31 17:51 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0041_add_at_tracking_fields"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="organizationuser", 14 | name="settings", 15 | field=models.JSONField(blank=True, default=dict, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/lib/superperms/orgs/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/superperms/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/lib/xml_mapping/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/management/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/management/commands/add_eeej_datasources.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from django.core.management.base import BaseCommand 7 | 8 | from seed.lib.geospatial.eeej import add_eeej_data 9 | 10 | 11 | class Command(BaseCommand): 12 | help = "Add EEEJ Data: HUD and CEJST" 13 | 14 | def handle(self, *args, **options): 15 | add_eeej_data() 16 | print("done!") 17 | -------------------------------------------------------------------------------- /seed/migrations/0002_buildingsnapshot_duplicate.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations, models 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("seed", "0001_initial"), 7 | ] 8 | 9 | operations = [ 10 | migrations.AddField( 11 | model_name="buildingsnapshot", 12 | name="duplicate", 13 | field=models.ForeignKey(on_delete=models.deletion.CASCADE, related_name="+", blank=True, to="seed.BuildingSnapshot", null=True), 14 | preserve_default=True, 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/migrations/0004_noncanonicalprojectbuildings.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations, models 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("seed", "0003_auto_20151105_1539"), 7 | ] 8 | 9 | operations = [ 10 | migrations.CreateModel( 11 | name="NonCanonicalProjectBuildings", 12 | fields=[ 13 | ( 14 | "projectbuilding", 15 | models.ForeignKey(on_delete=models.deletion.CASCADE, primary_key=True, serialize=False, to="seed.ProjectBuilding"), 16 | ), 17 | ], 18 | options={}, 19 | bases=(models.Model,), 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /seed/migrations/0006_canonicalbuilding_labels.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations, models 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("seed", "0005_auto_20151201_1510"), 7 | ] 8 | 9 | operations = [ 10 | migrations.AddField( 11 | model_name="canonicalbuilding", 12 | name="labels", 13 | field=models.ManyToManyField(to="seed.StatusLabel"), 14 | preserve_default=True, 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/migrations/0008_remove_projectbuilding_status_label.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("seed", "0007_auto_20151201_1515"), 7 | ] 8 | 9 | operations = [ 10 | migrations.RemoveField( 11 | model_name="projectbuilding", 12 | name="status_label", 13 | ), 14 | ] 15 | -------------------------------------------------------------------------------- /seed/migrations/0009_merge.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("seed", "0008_remove_projectbuilding_status_label"), 7 | ("seed", "0004_auto_20151201_1404"), 8 | ] 9 | 10 | operations = [] 11 | -------------------------------------------------------------------------------- /seed/migrations/0013_auto_20160225_1213.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations, models 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("seed", "0012_auto_20151222_1031"), 7 | ] 8 | 9 | operations = [ 10 | migrations.AlterField( 11 | model_name="attributeoption", 12 | name="value", 13 | field=models.TextField(), 14 | preserve_default=True, 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/migrations/0014_auto_20160308_1106.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("seed", "0013_auto_20160225_1213"), 7 | ] 8 | 9 | operations = [ 10 | migrations.RemoveField( 11 | model_name="schema", 12 | name="columns", 13 | ), 14 | migrations.RemoveField( 15 | model_name="schema", 16 | name="organization", 17 | ), 18 | migrations.DeleteModel( 19 | name="Schema", 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /seed/migrations/0015_merge.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations 2 | 3 | 4 | class Migration(migrations.Migration): 5 | dependencies = [ 6 | ("seed", "0013_auto_20160218_1335"), 7 | ("seed", "0014_auto_20160308_1106"), 8 | ] 9 | 10 | operations = [] 11 | -------------------------------------------------------------------------------- /seed/migrations/0017_auto_20160602_1436.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-06-02 21:36 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0016_auto_20160411_1139"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="buildingsnapshot", 14 | name="recent_sale_date", 15 | field=models.DateTimeField(blank=True, db_index=True, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0017_column_extra_data_source.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-06-14 20:27 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0016_auto_20160411_1139"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="column", 14 | name="extra_data_source", 15 | field=models.CharField(blank=True, choices=[(b"P", b"Property"), (b"T", b"Taxlot")], db_index=True, max_length=1, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0018_auto_20160609_0841.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-06-09 15:41 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0017_auto_20160602_1436"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="buildingsnapshot", 14 | name="recent_sale_date", 15 | field=models.DateTimeField(blank=True, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0018_auto_20160614_1330.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-06-14 20:30 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0017_column_extra_data_source"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterUniqueTogether( 13 | name="column", 14 | unique_together={("organization", "column_name", "is_extra_data", "extra_data_source")}, 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/migrations/0019_merge.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-06-16 16:04 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0018_auto_20160614_1330"), 9 | ("seed", "0018_auto_20160609_0841"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0021_auto_20160818_1016.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-08-18 17:16 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0020_auto_20160725_1033"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="propertyview", 14 | name="labels", 15 | field=models.ManyToManyField(to="seed.StatusLabel"), 16 | ), 17 | migrations.AddField( 18 | model_name="taxlotview", 19 | name="labels", 20 | field=models.ManyToManyField(to="seed.StatusLabel"), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /seed/migrations/0022_merge.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-08-23 03:48 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0021_auto_20160818_1016"), 9 | ("seed", "0021_propertyauditlog_taxlotauditlog"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0022_propertystate_data_state.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-08-16 20:12 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0021_auto_20160727_1347"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="propertystate", 14 | name="data_state", 15 | field=models.IntegerField(choices=[(0, "Unknown"), (1, "Post Import"), (2, "Post Mapping"), (3, "Post Matching")], default=0), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0024_merge.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-08-23 17:53 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0021_auto_20160818_1016"), 9 | ("seed", "0023_auto_20160817_0901"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0026_auto_20160822_2109.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-08-23 04:09 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0025_auto_20160822_2108"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RenameField( 13 | model_name="taxlotauditlog", 14 | old_name="child", 15 | new_name="state", 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0029_merge.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-08-29 20:42 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0024_merge"), 9 | ("seed", "0028_auto_20160824_1642"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0030_column_table_name.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-08-31 15:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0029_merge"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="column", 14 | name="table_name", 15 | field=models.CharField(blank=True, db_index=True, max_length=512), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0033_merge.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-09-13 23:04 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0032_migrate_label_data"), 9 | ("seed", "0031_auto_20160913_0001"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0034_merge.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-09-20 17:42 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0033_merge"), 9 | ("seed", "0032_auto_20160916_1212"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0042_auto_20161015_0611.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-10-15 13:11 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0041_auto_20161014_1908"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="taxlotauditlog", 15 | name="state", 16 | field=models.ForeignKey( 17 | on_delete=django.db.models.deletion.CASCADE, related_name="taxlotauditlog__state", to="seed.TaxLotState" 18 | ), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /seed/migrations/0044_propertystate_property_type.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2016-12-09 17:47 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0043_auto_20161025_1033"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="propertystate", 14 | name="property_type", 15 | field=models.TextField(blank=True, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0045_auto_20170112_1233.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-01-12 20:33 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0044_propertystate_property_type"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="propertystate", 14 | name="lot_number", 15 | field=models.TextField(blank=True, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0053_auto_20170320_1159.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-03-20 18:59 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0052_auto_20170307_0955"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterUniqueTogether( 13 | name="column", 14 | unique_together=set(), 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/migrations/0057_remove_column_extra_data_source.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-03-21 19:32 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0056_cleanup_columns"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RemoveField( 13 | model_name="column", 14 | name="extra_data_source", 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/migrations/0060_column_import_file.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-04-09 03:02 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("data_importer", "0009_importfile_uploaded_filename"), 10 | ("seed", "0059_auto_20170407_1516"), 11 | ] 12 | 13 | operations = [ 14 | migrations.AddField( 15 | model_name="column", 16 | name="import_file", 17 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="data_importer.ImportFile"), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /seed/migrations/0062_auto_20170510_1525.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-05-10 22:25 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0061_dataqualitycheck_rule"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="rule", 15 | name="status_label", 16 | field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.DO_NOTHING, to="seed.StatusLabel"), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /seed/migrations/0063_rule_text_match.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-05-11 22:00 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0062_auto_20170510_1525"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="rule", 14 | name="text_match", 15 | field=models.CharField(max_length=200, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0064_auto_20170516_1155.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-05-16 18:55 2 | 3 | from django.db import migrations 4 | 5 | # remove the cleansing_rules from the database 6 | 7 | DROP_ACCOUNT_TABLES = """\ 8 | DROP TABLE IF EXISTS cleansing_rules CASCADE; 9 | """ 10 | 11 | 12 | class Migration(migrations.Migration): 13 | dependencies = [ 14 | ("seed", "0063_rule_text_match"), 15 | ] 16 | 17 | operations = [ 18 | migrations.RunSQL(DROP_ACCOUNT_TABLES), 19 | ] 20 | -------------------------------------------------------------------------------- /seed/migrations/0065_auto_20170518_0854.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-05-18 15:54 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0064_auto_20170516_1155"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="dataqualitycheck", 14 | name="name", 15 | field=models.CharField(default=b"Default Data Quality Check", max_length=255), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0066_auto_20170522_1252.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-05-22 19:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0065_auto_20170518_0854"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="rule", 14 | name="severity", 15 | field=models.IntegerField(choices=[(0, b"error"), (1, b"warning")], default=0), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0070_merge.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.13 on 2017-06-21 21:38 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0068_green_assessments"), 9 | ("seed", "0069_auto_20170614_1430"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0072_auto_20170918_0850.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.13 on 2017-09-18 15:50 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0071_auto_20170721_1203"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="noncanonicalprojectbuildings", 15 | name="projectbuilding", 16 | field=models.OneToOneField( 17 | on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to="seed.ProjectBuilding" 18 | ), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /seed/migrations/0073_column_units_pint.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.13 on 2017-09-08 23:28 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0072_auto_20170908_1521"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="column", 14 | name="units_pint", 15 | field=models.CharField(blank=True, max_length=64, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0074_merge.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.13 on 2017-09-20 00:27 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0073_column_units_pint"), 9 | ("seed", "0072_auto_20170918_0850"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0079_propertystate_ubid.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2017-12-15 15:12 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0078_auto_20171214_0846"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="propertystate", 14 | name="ubid", 15 | field=models.CharField(blank=True, max_length=255, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0080_column_shared_field_type.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2018-01-06 02:48 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0079_propertystate_ubid"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="column", 14 | name="shared_field_type", 15 | field=models.IntegerField(choices=[(0, b"None"), (1, b"Public")], default=0), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0081_merge_20180109_0747.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2018-01-09 15:47 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0080_column_shared_field_type"), 9 | ("seed", "0080_auto_20180107_0808"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0087_merge_20180123_1033.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2018-01-23 18:33 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0082_auto_20180119_1021"), 9 | ("seed", "0086_auto_20180111_1531"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0088_auto_20180423_0933.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2018-04-23 16:33 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0087_merge_20180123_1033"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="propertystate", 14 | name="latitude", 15 | field=models.FloatField(blank=True, null=True), 16 | ), 17 | migrations.AddField( 18 | model_name="propertystate", 19 | name="longitude", 20 | field=models.FloatField(blank=True, null=True), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /seed/migrations/0094_column_merge_protection.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2018-08-24 17:03 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0093_auto_20180817_1112"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="column", 14 | name="merge_protection", 15 | field=models.IntegerField(choices=[(0, b"Favor New"), (1, b"Favor Existing")], default=0), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0095_auto_20180920_1819.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2018-09-21 01:19 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0094_column_merge_protection"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterUniqueTogether( 13 | name="propertymeasure", 14 | unique_together={("property_measure_name", "property_state", "measure", "application_scale", "implementation_status")}, 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/migrations/0099_auto_20190214_1259.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.18 on 2019-02-14 20:59 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0098_auto_20181121_1302"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="buildingfile", 14 | name="file_type", 15 | field=models.IntegerField(choices=[(0, "Unknown"), (1, "BuildingSync"), (3, "HPXML")], default=0), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0106_meter_scenario_id.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.21 on 2019-07-09 17:23 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0105_auto_20190702_1400"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="meter", 15 | name="scenario_id", 16 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="seed.Scenario"), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /seed/migrations/0107_auto_20190709_2058.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.21 on 2019-07-10 03:58 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0106_meter_scenario_id"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RenameField( 13 | model_name="meter", 14 | old_name="scenario_id", 15 | new_name="scenario", 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0108_merge_20190716_1038.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.21 on 2019-07-16 17:38 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0105_auto_20190613_1251"), 9 | ("seed", "0107_auto_20190709_2058"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0114_auto_20191211_0958.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.23 on 2019-12-11 17:58 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0113_column_geocoding_order"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="rule", 14 | name="severity", 15 | field=models.IntegerField(choices=[(0, "error"), (1, "warning"), (2, "valid")], default=0), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0128_auto_20200810_1731.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2020-08-10 17:31 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("orgs", "0013_organization_comstock_enabled"), 9 | ("seed", "0127_auto_20200605_1125"), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameModel( 14 | old_name="ColumnMappingPreset", 15 | new_name="ColumnMappingProfile", 16 | ), 17 | migrations.RenameField( 18 | model_name="columnmappingprofile", 19 | old_name="preset_type", 20 | new_name="profile_type", 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /seed/migrations/0128_auto_20210119_1238.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2021-01-19 20:38 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0127_auto_20200605_1125"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="propertystate", 14 | name="jurisdiction_property_id", 15 | field=models.TextField(blank=True, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0130_auto_20200924_1337.py: -------------------------------------------------------------------------------- 1 | # Manually generated on 2020-09-24 13:10 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0129_auto_20200828_0610"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RunSQL('ALTER TABLE "seed_taxlotstate" ALTER COLUMN "extra_data" TYPE jsonb;'), 13 | migrations.RunSQL('ALTER TABLE "seed_propertystate" ALTER COLUMN "extra_data" TYPE jsonb;'), 14 | ] 15 | -------------------------------------------------------------------------------- /seed/migrations/0133_auto_20201216_2035.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2020-12-16 20:35 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0132_auto_20201211_1949_squashed_0134_auto_20201211_2053"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="analysisinputfile", 15 | name="analysis", 16 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="input_files", to="seed.Analysis"), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /seed/migrations/0134_auto_20201217_2236.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2020-12-17 22:36 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0133_auto_20201216_2035"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="analysismessage", 14 | name="type", 15 | field=models.IntegerField(choices=[(1, "default"), (10, "debug"), (20, "info"), (30, "warning"), (40, "error")]), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0135_auto_20210112_2306.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2021-01-12 23:06 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0134_auto_20201217_2236"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="analysisoutputfile", 14 | name="content_type", 15 | field=models.IntegerField(choices=[(1, "BuildingSync"), (100, "PNG")]), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0136_merge_20210120_0944.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2021-01-20 17:44 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0135_auto_20210112_2306"), 9 | ("seed", "0128_auto_20210119_1238"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0137_statuslabel_show_in_list.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2021-04-14 21:09 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0136_merge_20210120_0944"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="statuslabel", 14 | name="show_in_list", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0139_auto_20210524_1016.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.20 on 2021-05-24 17:16 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0138_auto_20210512_0024"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="propertymeasure", 14 | name="recommended", 15 | field=models.BooleanField(default=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0140_scenario_annual_peak_electricity_reduction.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.20 on 2021-06-02 22:28 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0139_auto_20210524_1016"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="scenario", 14 | name="annual_peak_electricity_reduction", 15 | field=models.FloatField(null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0141_propertymeasure_useful_life.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.20 on 2021-06-03 18:10 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0140_scenario_annual_peak_electricity_reduction"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="propertymeasure", 14 | name="useful_life", 15 | field=models.FloatField(null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0142_columnlistprofile_derived_columns.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.20 on 2021-06-03 19:14 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0141_propertymeasure_useful_life"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="columnlistprofile", 14 | name="derived_columns", 15 | field=models.ManyToManyField(related_name="column_list_profiles", to="seed.DerivedColumn"), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0142_merge_20210611_0610.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2021-06-11 13:10 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0141_auto_20210611_0539"), 9 | ("seed", "0141_propertymeasure_useful_life"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0144_merge_20210615_1322.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2021-06-15 20:22 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0143_auto_20210614_2058"), 9 | ("seed", "0142_merge_20210611_0610"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0145_merge_20210621_0716.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.13 on 2021-06-21 14:16 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0140_postofficeemail_postofficeemailtemplate"), 9 | ("seed", "0144_merge_20210615_1322"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0145_rule_for_derived_column.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.20 on 2021-06-15 21:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0144_merge_20210615_1322"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="rule", 14 | name="for_derived_column", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0146_merge_20210622_2054.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.24 on 2021-06-22 20:54 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0145_rule_for_derived_column"), 9 | ("seed", "0145_merge_20210621_0716"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0148_auto_20210712_2134.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-07-12 21:34 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0147_rename_bsync_col_mapping_preset"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterModelOptions( 13 | name="compliance", 14 | options={"ordering": ("-modified", "-created")}, 15 | ), 16 | migrations.AlterModelOptions( 17 | name="project", 18 | options={"ordering": ("-modified", "-created")}, 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /seed/migrations/0149_auto_20210922_1740.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.13 on 2021-09-22 17:40 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0148_auto_20210712_2134"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="analysis", 14 | name="service", 15 | field=models.IntegerField(choices=[(1, "BSyncr"), (2, "BETTER"), (3, "EUI")]), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0151_seeduser_20210923_1337.py: -------------------------------------------------------------------------------- 1 | # Manually created on 2021-09-23 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0150_auto_20210922_1909"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RunSQL('ALTER TABLE "landing_seeduser" ALTER COLUMN "default_custom_columns" TYPE jsonb;'), 13 | migrations.RunSQL('ALTER TABLE "landing_seeduser" ALTER COLUMN "default_building_detail_custom_columns" TYPE jsonb;'), 14 | ] 15 | -------------------------------------------------------------------------------- /seed/migrations/0153_auto_20211012_2202.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-10-12 22:02 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0152_seed_renameeuicol_20211004_1337"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="analysis", 14 | name="service", 15 | field=models.IntegerField(choices=[(1, "BSyncr"), (2, "BETTER"), (3, "EUI"), (4, "CO2")]), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0154_analysis_created_at.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-10-18 18:42 2 | 3 | import django.utils.timezone 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0153_auto_20211012_2202"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="analysis", 15 | name="created_at", 16 | field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), 17 | preserve_default=False, 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /seed/migrations/0160_merge_0159_auto_20220310_1648_0159_inventorydocument.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.12 on 2022-04-11 03:11 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0159_auto_20220310_1648"), 9 | ("seed", "0159_inventorydocument"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /seed/migrations/0161_alter_inventorydocument_file_type.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.12 on 2022-04-11 04:01 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0160_merge_0159_auto_20220310_1648_0159_inventorydocument"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="inventorydocument", 14 | name="file_type", 15 | field=models.IntegerField(choices=[(0, "Unknown"), (1, "PDF"), (2, "OSM"), (3, "IDF"), (4, "DXF")], default=0), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0168_datalogger_identifier.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.13 on 2022-06-09 21:16 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0167_auto_20220608_0759"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="datalogger", 14 | name="identifier", 15 | field=models.CharField(default="", max_length=255), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0194_alter_taxlotview_taxlot.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.18 on 2023-04-27 15:55 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0193_remove_null_taxlot_views"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="taxlotview", 15 | name="taxlot", 16 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="views", to="seed.taxlot"), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /seed/migrations/0195_sf_delete_label_checkbox.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.18 on 2023-05-04 15:59 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0194_alter_taxlotview_taxlot"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="salesforceconfig", 14 | name="delete_label_after_sync", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0198_auto_20230703_0828.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.19 on 2023-07-03 14:28 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0197_pm_source_type"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="cycle", 14 | name="end", 15 | field=models.DateField(), 16 | ), 17 | migrations.AlterField( 18 | model_name="cycle", 19 | name="start", 20 | field=models.DateField(), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /seed/migrations/0200_rehash.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-01-19 21:18 2 | 3 | from django.db import migrations 4 | 5 | from seed.utils.migrations import rehash 6 | 7 | 8 | class Migration(migrations.Migration): 9 | dependencies = [ 10 | ("seed", "0199_rename_ulid_taxlotstate_ubid"), 11 | ] 12 | 13 | operations = [ 14 | migrations.RunPython(lambda apps, _schema_editor: rehash(apps)), 15 | ] 16 | -------------------------------------------------------------------------------- /seed/migrations/0208_alter_scenario_event.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.20 on 2023-09-27 18:10 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0207_uniformat"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="scenario", 15 | name="event", 16 | field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="scenarios", to="seed.atevent"), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /seed/migrations/0211_auto_20240109_1348.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.23 on 2024-01-09 21:48 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0210_natural_sort"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RemoveConstraint( 13 | model_name="derivedcolumn", 14 | name="unique_name_for_organization", 15 | ), 16 | migrations.AddConstraint( 17 | model_name="derivedcolumn", 18 | constraint=models.UniqueConstraint(fields=("organization", "name", "inventory_type"), name="unique_name_for_organization"), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /seed/migrations/0214_delete_filtergroup_labels.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.18 on 2023-12-19 16:20 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0213_move_filtergroup_labels"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RemoveField( 13 | model_name="filtergroup", 14 | name="label_logic", 15 | ), 16 | migrations.RemoveField( 17 | model_name="filtergroup", 18 | name="labels", 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /seed/migrations/0216_alter_sensor_unique_together.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.23 on 2024-03-11 23:50 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0215_accountability_hierarchy"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterUniqueTogether( 13 | name="sensor", 14 | unique_together={("data_logger", "display_name"), ("data_logger", "column_name")}, 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/migrations/0217_goal_commitment_sqft.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-05-07 19:38 2 | 3 | import django.core.validators 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0216_alter_sensor_unique_together"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="goal", 15 | name="commitment_sqft", 16 | field=models.IntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0)]), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /seed/migrations/0219_auto_20240604_1605.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-06-04 23:05 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0218_elements"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="column", 14 | name="is_option_for_reports_x_axis", 15 | field=models.BooleanField(default=False), 16 | ), 17 | migrations.AddField( 18 | model_name="column", 19 | name="is_option_for_reports_y_axis", 20 | field=models.BooleanField(default=False), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /seed/migrations/0220_alter_analysis_service.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-07-02 18:57 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0219_auto_20240604_1605"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="analysis", 14 | name="service", 15 | field=models.IntegerField( 16 | choices=[(1, "BSyncr"), (2, "BETTER"), (3, "EUI"), (4, "CO2"), (5, "EEEJ"), (6, "Element Statistics")] 17 | ), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /seed/migrations/0225_column_is_excluded_from_hash.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-06-03 18:23 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0224_alter_meter_type"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="column", 14 | name="is_excluded_from_hash", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0226_rehash.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.9.5 on 2017-01-19 21:18 2 | 3 | from django.db import migrations 4 | 5 | from seed.utils.migrations import rehash 6 | 7 | 8 | class Migration(migrations.Migration): 9 | dependencies = [ 10 | ("seed", "0225_column_is_excluded_from_hash"), 11 | ] 12 | 13 | operations = [ 14 | migrations.RunPython(lambda apps, _schema_editor: rehash(apps)), 15 | ] 16 | -------------------------------------------------------------------------------- /seed/migrations/0227_remove_oauth.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations 2 | 3 | # remove the oauth2 tables from the database 4 | 5 | DROP_OAUTH_TABLES = """ 6 | DROP TABLE IF EXISTS oauth2_jwt_provider_publickey CASCADE; 7 | DROP TABLE IF EXISTS oauth2_provider_accesstoken CASCADE; 8 | DROP TABLE IF EXISTS oauth2_provider_application CASCADE; 9 | DROP TABLE IF EXISTS oauth2_provider_grant CASCADE; 10 | DROP TABLE IF EXISTS oauth2_provider_refreshtoken CASCADE; 11 | """ 12 | 13 | 14 | class Migration(migrations.Migration): 15 | dependencies = [ 16 | ("seed", "0226_rehash"), 17 | ] 18 | 19 | operations = [ 20 | migrations.RunSQL(DROP_OAUTH_TABLES), 21 | ] 22 | -------------------------------------------------------------------------------- /seed/migrations/0230_alter_event_cycle.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-09-06 17:02 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0229_add_extra_data_to_states"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="event", 15 | name="cycle", 16 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="seed.cycle"), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /seed/migrations/0231_column_is_updating.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-08-20 22:53 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0230_alter_event_cycle"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="column", 14 | name="is_updating", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /seed/migrations/0233_alter_goal_options.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-11-01 21:40 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0232_reportconfiguration"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterModelOptions( 13 | name="goal", 14 | options={"ordering": ["name"]}, 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /seed/migrations/0238_meter_systems.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-10-10 19:18 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("seed", "0237_auto_20241008_1510"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="meter", 15 | name="system", 16 | field=models.ForeignKey( 17 | blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="meters", to="seed.system" 18 | ), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /seed/migrations/0239_auto_20241030_1434.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.25 on 2024-10-30 21:34 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("seed", "0238_meter_systems"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterModelOptions( 13 | name="service", 14 | options={"ordering": ["name"]}, 15 | ), 16 | migrations.AlterModelOptions( 17 | name="system", 18 | options={"ordering": ["name"]}, 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /seed/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/models/auditlog.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | AUDIT_IMPORT = 0 7 | AUDIT_USER_EDIT = 1 8 | AUDIT_USER_CREATE = 2 9 | 10 | DATA_UPDATE_TYPE = ((AUDIT_IMPORT, "ImportFile"), (AUDIT_USER_EDIT, "UserEdit"), (AUDIT_USER_CREATE, "UserCreate")) 11 | -------------------------------------------------------------------------------- /seed/public/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/public/migrations/0003_auto_20180106_2123.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 1.11.6 on 2018-01-07 05:23 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("public", "0002_auto_20160411_1139"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RemoveField( 13 | model_name="sharedbuildingfield", 14 | name="field", 15 | ), 16 | migrations.RemoveField( 17 | model_name="sharedbuildingfield", 18 | name="org", 19 | ), 20 | migrations.DeleteModel( 21 | name="SharedBuildingField", 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /seed/public/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/serializers/access_level_instances.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import AccessLevelInstance 9 | 10 | 11 | class AccessLevelInstanceSerializer(serializers.ModelSerializer): 12 | class Meta: 13 | model = AccessLevelInstance 14 | fields = "__all__" 15 | -------------------------------------------------------------------------------- /seed/serializers/analyses.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import Analysis 9 | from seed.serializers.utils import CustomChoicesField 10 | 11 | 12 | class AnalysisSerializer(serializers.ModelSerializer): 13 | service = CustomChoicesField(Analysis.SERVICE_TYPES) 14 | status = serializers.CharField(source="get_status_display") 15 | 16 | class Meta: 17 | model = Analysis 18 | fields = "__all__" 19 | -------------------------------------------------------------------------------- /seed/serializers/analysis_input_files.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import AnalysisInputFile 9 | 10 | 11 | class AnalysisInputFileSerializer(serializers.ModelSerializer): 12 | content_type = serializers.CharField(source="get_content_type_display") 13 | 14 | class Meta: 15 | model = AnalysisInputFile 16 | fields = "__all__" 17 | -------------------------------------------------------------------------------- /seed/serializers/analysis_messages.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import AnalysisMessage 9 | 10 | 11 | class AnalysisMessageSerializer(serializers.ModelSerializer): 12 | type = serializers.CharField(source="get_type_display") 13 | 14 | class Meta: 15 | model = AnalysisMessage 16 | fields = "__all__" 17 | -------------------------------------------------------------------------------- /seed/serializers/analysis_output_files.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import AnalysisOutputFile 9 | 10 | 11 | class AnalysisOutputFileSerializer(serializers.ModelSerializer): 12 | content_type = serializers.CharField(source="get_content_type_display") 13 | 14 | class Meta: 15 | model = AnalysisOutputFile 16 | fields = "__all__" 17 | -------------------------------------------------------------------------------- /seed/serializers/audit_template_configs.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import AuditTemplateConfig 9 | 10 | 11 | class AuditTemplateConfigSerializer(serializers.ModelSerializer): 12 | class Meta: 13 | model = AuditTemplateConfig 14 | fields = "__all__" 15 | -------------------------------------------------------------------------------- /seed/serializers/cycles.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import Cycle 9 | 10 | 11 | class CycleSerializer(serializers.ModelSerializer): 12 | class Meta: 13 | model = Cycle 14 | fields = ( 15 | "name", 16 | "start", 17 | "end", 18 | "organization", 19 | "user", 20 | "id", 21 | ) 22 | extra_kwargs = {"user": {"read_only": True}, "organization": {"read_only": True}} 23 | -------------------------------------------------------------------------------- /seed/serializers/data_loggers.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import DataLogger 9 | 10 | 11 | class DataLoggerSerializer(serializers.ModelSerializer): 12 | class Meta: 13 | model = DataLogger 14 | fields = "__all__" 15 | -------------------------------------------------------------------------------- /seed/serializers/facilities_plan.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import FacilitiesPlan 9 | 10 | 11 | class FacilitiesPlanSerializer(serializers.ModelSerializer): 12 | class Meta: 13 | model = FacilitiesPlan 14 | fields = "__all__" 15 | -------------------------------------------------------------------------------- /seed/serializers/goal_notes.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import GoalNote 9 | 10 | 11 | class GoalNoteSerializer(serializers.ModelSerializer): 12 | class Meta: 13 | model = GoalNote 14 | fields = "__all__" 15 | -------------------------------------------------------------------------------- /seed/serializers/historical_notes.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import HistoricalNote 9 | 10 | 11 | class HistoricalNoteSerializer(serializers.ModelSerializer): 12 | class Meta: 13 | model = HistoricalNote 14 | fields = "__all__" 15 | -------------------------------------------------------------------------------- /seed/serializers/inventory_document.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | 5 | :author Katherine Fleming 6 | """ 7 | 8 | from rest_framework import serializers 9 | 10 | from seed.models import InventoryDocument 11 | from seed.serializers.base import ChoiceField 12 | 13 | 14 | class InventoryDocumentSerializer(serializers.ModelSerializer): 15 | file_type = ChoiceField(choices=InventoryDocument.FILE_TYPES) 16 | 17 | class Meta: 18 | model = InventoryDocument 19 | fields = "__all__" 20 | -------------------------------------------------------------------------------- /seed/serializers/scenarios.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from rest_framework import serializers 7 | 8 | from seed.models import Scenario 9 | from seed.serializers.base import ChoiceField 10 | from seed.serializers.measures import PropertyMeasureSerializer 11 | 12 | 13 | class ScenarioSerializer(serializers.ModelSerializer): 14 | measures = PropertyMeasureSerializer(many=True) 15 | temporal_status = ChoiceField(choices=Scenario.TEMPORAL_STATUS_TYPES) 16 | 17 | class Meta: 18 | model = Scenario 19 | fields = "__all__" 20 | -------------------------------------------------------------------------------- /seed/static/seed/images/ali-tree-example-lg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/images/ali-tree-example-lg.webp -------------------------------------------------------------------------------- /seed/static/seed/images/bg_first_td.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/images/bg_first_td.webp -------------------------------------------------------------------------------- /seed/static/seed/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/images/favicon.ico -------------------------------------------------------------------------------- /seed/static/seed/images/gray_square.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /seed/static/seed/images/kc_2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/images/kc_2.webp -------------------------------------------------------------------------------- /seed/static/seed/images/map_pin.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/images/map_pin.webp -------------------------------------------------------------------------------- /seed/static/seed/images/red_triangle.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /seed/static/seed/images/teal_circle.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /seed/static/seed/images/timeline_electricity.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /seed/static/seed/images/timeline_natural_gas.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /seed/static/seed/images/timeline_peak_down.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /seed/static/seed/images/upsidedown_t.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /seed/static/seed/js/constants.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | */ 5 | angular 6 | .module('SEED.constants', []) 7 | .constant('COLUMN_MAPPING_PROFILE_TYPE_NORMAL', 'Normal') 8 | .constant('COLUMN_MAPPING_PROFILE_TYPE_BUILDINGSYNC_DEFAULT', 'BuildingSync Default') 9 | .constant('COLUMN_MAPPING_PROFILE_TYPE_BUILDINGSYNC_CUSTOM', 'BuildingSync Custom'); 10 | -------------------------------------------------------------------------------- /seed/static/seed/js/controllers/about_controller.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | */ 5 | angular.module('SEED.controller.about', []).controller('about_controller', [ 6 | '$scope', 7 | 'version_payload', 8 | // eslint-disable-next-line func-names 9 | function ($scope, version_payload) { 10 | $scope.version = version_payload.version; 11 | $scope.sha = version_payload.sha; 12 | } 13 | ]); 14 | -------------------------------------------------------------------------------- /seed/static/seed/js/controllers/modified_modal_controller.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | */ 5 | angular.module('SEED.controller.modified_modal', []).controller('modified_modal_controller', [ 6 | '$scope', 7 | '$uibModalInstance', 8 | // eslint-disable-next-line func-names 9 | function ($scope, $uibModalInstance) { 10 | $scope.leave = () => { 11 | $uibModalInstance.close(); 12 | }; 13 | 14 | $scope.stay = () => { 15 | $uibModalInstance.dismiss(); 16 | }; 17 | } 18 | ]); 19 | -------------------------------------------------------------------------------- /seed/static/seed/js/controllers/reset_modal_controller.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | */ 5 | angular.module('SEED.controller.reset_modal', []).controller('reset_modal_controller', [ 6 | '$scope', 7 | '$uibModalInstance', 8 | // eslint-disable-next-line func-names 9 | function ($scope, $uibModalInstance) { 10 | $scope.reset = () => { 11 | $uibModalInstance.close(); 12 | }; 13 | 14 | $scope.cancel = () => { 15 | $uibModalInstance.dismiss(); 16 | }; 17 | } 18 | ]); 19 | -------------------------------------------------------------------------------- /seed/static/seed/js/directives/sdEnter.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | * 5 | * Directive sd-enter used for search or filter input to only fire on 'enter' or 'return' 6 | */ 7 | angular.module('sdEnter', []).directive( 8 | 'sdEnter', 9 | () => (scope, element, attrs) => { 10 | element.bind('keydown keypress', (event) => { 11 | if (event.which === 13) { 12 | scope.$apply(() => { 13 | scope.$eval(attrs.sdEnter); 14 | }); 15 | event.preventDefault(); 16 | } 17 | }); 18 | } 19 | ); 20 | -------------------------------------------------------------------------------- /seed/static/seed/js/directives/sdUbid.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | */ 5 | angular.module('sdUbid', []).directive('ubid', () => ({ 6 | require: 'ngModel', 7 | link: (scope, elm, attrs, ctrl) => { 8 | ctrl.$validators.ubid = (modelValue) => UniqueBuildingIdentification.v3.isValid(modelValue); 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /seed/static/seed/js/directives/sdWhenScrolled.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | * 5 | * infinite-scrolling: http://jsfiddle.net/vojtajina/U7Bz9/ 6 | */ 7 | angular.module('sdWhenScrolled', []).directive( 8 | 'sdWhenScrolled', 9 | () => (scope, elm, attr) => { 10 | const raw = elm[0]; 11 | 12 | elm.bind('scroll', () => { 13 | if (raw.scrollTop + raw.offsetHeight >= raw.scrollHeight) { 14 | scope.$apply(attr.sdWhenScrolled); 15 | } 16 | }); 17 | } 18 | ); 19 | -------------------------------------------------------------------------------- /seed/static/seed/js/filters/district.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | * 5 | * district 6 | * For when you want to capitalize each word, remove underscores. 7 | */ 8 | angular.module('district', []).filter( 9 | 'district', 10 | () => (input) => { 11 | if (_.isNil(input)) { 12 | return input; 13 | } 14 | if (input.toUpperCase() === 'DISTRICT') { 15 | return 'County/District/Ward/Borough'; 16 | } 17 | return input; 18 | } 19 | ); 20 | -------------------------------------------------------------------------------- /seed/static/seed/js/filters/fromNow.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | * 5 | * filter 'fromNow' using the moment.js function 'fromNow()' 6 | * see: http://momentjs.com/ 7 | */ 8 | angular.module('fromNow', []).filter( 9 | 'fromNow', 10 | () => (dateString) => { 11 | if (_.isNumber(dateString) || /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z/.test(dateString)) { 12 | const m = moment(dateString); 13 | if (m.isValid()) return m.fromNow(); 14 | } 15 | return 'a few seconds ago'; 16 | } 17 | ); 18 | -------------------------------------------------------------------------------- /seed/static/seed/js/filters/getAnalysisRunAuthor.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | */ 5 | angular.module('getAnalysisRunAuthor', []).filter( 6 | 'getAnalysisRunAuthor', 7 | () => (users) => { 8 | if (!users || users.length < 1) { 9 | return ''; // no user, display nothing 10 | } 11 | const user = users[0]; 12 | if (!user.first_name || !user.last_name) { 13 | return user.email; // no full name, display email 14 | } 15 | return [user.last_name, user.first_name].join(', '); // display full name 16 | } 17 | ); 18 | -------------------------------------------------------------------------------- /seed/static/seed/js/filters/htmlToPlainText.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | * 5 | * htmlToPlainText 6 | * Strips html tags from text 7 | */ 8 | angular.module('htmlToPlainText', []).filter( 9 | 'htmlToPlainText', 10 | () => (html) => { 11 | const temp = document.createElement('div'); 12 | temp.innerHTML = html; 13 | return temp.textContent; // Or return temp.innerText if you need to return only visible text. It's slower. 14 | } 15 | ); 16 | -------------------------------------------------------------------------------- /seed/static/seed/js/filters/ignoremap.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | */ 5 | angular.module('ignoremap', []).filter( 6 | 'ignoremap', 7 | () => (input) => { 8 | if (_.isEmpty(input)) return '------ Ignore Row ------'; 9 | return input; 10 | } 11 | ); 12 | -------------------------------------------------------------------------------- /seed/static/seed/js/filters/startCase.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | * 5 | * StartCase 6 | * For when you want to capitalize the first letter of each word 7 | * https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage 8 | */ 9 | angular.module('startCase', []).filter( 10 | 'startCase', 11 | () => (input) => { 12 | if (typeof input !== 'string') return input; 13 | 14 | return _.startCase(input.toLowerCase()); 15 | } 16 | ); 17 | -------------------------------------------------------------------------------- /seed/static/seed/js/filters/startFrom.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | * 5 | * StartFrom 6 | * For when you want to paginate client side, and start ng-repeat from a specific number. 7 | */ 8 | angular.module('startFrom', []).filter( 9 | 'startFrom', 10 | () => (input, start) => { 11 | start = +start; // parse to int 12 | return input.slice(start); 13 | } 14 | ); 15 | -------------------------------------------------------------------------------- /seed/static/seed/js/filters/titleCase.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | * 5 | * TitleCase 6 | * For when you want to capitalize each word, remove underscores. 7 | */ 8 | angular.module('titleCase', []).filter( 9 | 'titleCase', 10 | () => (input) => { 11 | if (_.isNil(input)) { 12 | return input; 13 | } 14 | input = input.toString(); 15 | input = input.replace(/_/g, ' '); 16 | input = input.replace(/(?:^|\s)\S/g, (a) => a.toUpperCase()); 17 | 18 | return input; 19 | } 20 | ); 21 | -------------------------------------------------------------------------------- /seed/static/seed/js/services/main_service.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | */ 5 | angular.module('SEED.service.main', []).factory('main_service', [ 6 | '$http', 7 | ($http) => { 8 | const main_factory = {}; 9 | 10 | main_factory.version = () => $http.get('/api/version/').then((response) => response.data); 11 | 12 | return main_factory; 13 | } 14 | ]); 15 | -------------------------------------------------------------------------------- /seed/static/seed/js/services/meters_service.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | */ 5 | angular.module('SEED.service.meters', []).factory('meters_service', [ 6 | '$http', 7 | ($http) => { 8 | const meters_factory = {}; 9 | 10 | meters_factory.valid_energy_types_units = () => $http.get('/api/v3/properties/valid_meter_types_and_units/').then((response) => response.data); 11 | 12 | return meters_factory; 13 | } 14 | ]); 15 | -------------------------------------------------------------------------------- /seed/static/seed/js/services/uniformat_service.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | * See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | */ 5 | angular.module('SEED.service.uniformat', []).factory('uniformat_service', [ 6 | '$http', 7 | ($http) => ({ 8 | // Return all uniformat categories 9 | get_uniformat: () => $http 10 | .get('/api/v3/uniformat/').then(({ data }) => data.reduce((acc, element) => { 11 | const { id, ...rest } = element; 12 | acc[id] = rest; 13 | return acc; 14 | }, {})) 15 | }) 16 | ]); 17 | -------------------------------------------------------------------------------- /seed/static/seed/partials/api_docs.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /seed/static/seed/partials/create_column_modal.html: -------------------------------------------------------------------------------- 1 | 4 | 12 | 17 | -------------------------------------------------------------------------------- /seed/static/seed/partials/delete_facilities_plan_run_modal.html: -------------------------------------------------------------------------------- 1 | 4 | 7 | 15 | -------------------------------------------------------------------------------- /seed/static/seed/partials/delete_file_modal.html: -------------------------------------------------------------------------------- 1 | 4 | 10 | 24 | -------------------------------------------------------------------------------- /seed/static/seed/partials/event_analysis_card.html: -------------------------------------------------------------------------------- 1 |
2 |
10 |
11 |
18 |
19 |
20 | -------------------------------------------------------------------------------- /seed/static/seed/partials/inventory_loading_modal.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /seed/static/seed/partials/meter_deletion_modal.html: -------------------------------------------------------------------------------- 1 | 4 | 5 | 23 | -------------------------------------------------------------------------------- /seed/static/seed/partials/modified_modal.html: -------------------------------------------------------------------------------- 1 | 4 | 8 | 22 | -------------------------------------------------------------------------------- /seed/static/seed/partials/notes_modal.html: -------------------------------------------------------------------------------- 1 | 4 | 8 | 19 | -------------------------------------------------------------------------------- /seed/static/seed/partials/pairing_nav.html: -------------------------------------------------------------------------------- 1 | Pairing 8 | Pairing Settings 15 | -------------------------------------------------------------------------------- /seed/static/seed/partials/profile_nav.html: -------------------------------------------------------------------------------- 1 | Profile Info 2 | Security 3 | Admin 6 | Developer 7 | Two Factor Profile 10 | -------------------------------------------------------------------------------- /seed/static/seed/partials/reset_modal.html: -------------------------------------------------------------------------------- 1 | 6 | 9 | 23 | -------------------------------------------------------------------------------- /seed/static/seed/partials/ubid_admin_modal.html: -------------------------------------------------------------------------------- 1 | 8 | 14 | 19 | -------------------------------------------------------------------------------- /seed/static/seed/pdf/SEED_Platform_V1.1_Getting_Started_Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/pdf/SEED_Platform_V1.1_Getting_Started_Guide.pdf -------------------------------------------------------------------------------- /seed/static/seed/pdf/SEED_Platform_V1_3_Getting_Started_Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/pdf/SEED_Platform_V1_3_Getting_Started_Guide.pdf -------------------------------------------------------------------------------- /seed/static/seed/pdf/SEED_Platform_V2_18_Getting_Started_Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/pdf/SEED_Platform_V2_18_Getting_Started_Guide.pdf -------------------------------------------------------------------------------- /seed/static/seed/pdf/SEED_Release_2_User_Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/pdf/SEED_Release_2_User_Guide.pdf -------------------------------------------------------------------------------- /seed/static/seed/pdf/SEED_v1_User_Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/pdf/SEED_v1_User_Guide.pdf -------------------------------------------------------------------------------- /seed/static/seed/sample-data/__MACOSX/._seed-sample-data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/sample-data/__MACOSX/._seed-sample-data -------------------------------------------------------------------------------- /seed/static/seed/sample-data/__MACOSX/seed-sample-data/._interval_data-example-pm-monthly-meter-usage.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/sample-data/__MACOSX/seed-sample-data/._interval_data-example-pm-monthly-meter-usage.xlsx -------------------------------------------------------------------------------- /seed/static/seed/sample-data/__MACOSX/seed-sample-data/._interval_data-portfolio-manager-sample.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/sample-data/__MACOSX/seed-sample-data/._interval_data-portfolio-manager-sample.xlsx -------------------------------------------------------------------------------- /seed/static/seed/sample-data/__MACOSX/seed-sample-data/._simple_data-covered-buildings-sample.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/sample-data/__MACOSX/seed-sample-data/._simple_data-covered-buildings-sample.csv -------------------------------------------------------------------------------- /seed/static/seed/sample-data/__MACOSX/seed-sample-data/._simple_data-portfolio-manager-sample.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/sample-data/__MACOSX/seed-sample-data/._simple_data-portfolio-manager-sample.csv -------------------------------------------------------------------------------- /seed/static/seed/sample-data/seed-sample-data.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/sample-data/seed-sample-data.zip -------------------------------------------------------------------------------- /seed/static/seed/sample-data/seed-sample-data/interval_data-example-pm-monthly-meter-usage.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/sample-data/seed-sample-data/interval_data-example-pm-monthly-meter-usage.xlsx -------------------------------------------------------------------------------- /seed/static/seed/sample-data/seed-sample-data/interval_data-portfolio-manager-sample.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/static/seed/sample-data/seed-sample-data/interval_data-portfolio-manager-sample.xlsx -------------------------------------------------------------------------------- /seed/static/seed/tests/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | jasmine: true 4 | }, 5 | globals: { 6 | module: true 7 | }, 8 | rules: { 9 | 'import/no-extraneous-dependencies': 'off', 10 | 'no-global-assign': ['error', { 11 | exceptions: ['confirm'] 12 | }] 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /seed/templates/seed/_fonts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /seed/templates/seed/_js_urls.html: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /seed/templates/seed/account_org_added.html: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% autoescape off %} 2 | {% blocktrans %}Hello {{ first_name }}, {% endblocktrans %} 3 | 4 | {% blocktrans %}You are receiving this e-mail because you have been added to the '{{ new_org }}' organization by '{{ requested_by }}'. Please disregard this message if you are not expecting access 5 | to SEED.{% endblocktrans %} 6 | 7 | {% blocktrans %}You can view your new organization by logging into the SEED instance here:{% endblocktrans %} 8 | {{ protocol }}://{{ domain }} 9 | 10 | {% blocktrans %}The SEED Team{% endblocktrans %} 11 | 12 | {% endautoescape %} 13 | -------------------------------------------------------------------------------- /seed/templates/seed/salesforce_update_errors.html: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% autoescape off %} 2 | {% blocktrans %}Hello, {% endblocktrans %} 3 | 4 | {% blocktrans %}You're receiving this message because your e-mail is registered as the 'logging email' for Salesforce updates in the SEED {{ organization_name }} organization. {% endblocktrans %} 5 | 6 | {% blocktrans %}Errors were encountered while running the automatic Salesforce update process:{% endblocktrans %} 7 | 8 | {% blocktrans %}{{ errors }}{% endblocktrans %} 9 | 10 | 11 | {% blocktrans %}The SEED Team{% endblocktrans %} 12 | 13 | {% endautoescape %} 14 | -------------------------------------------------------------------------------- /seed/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/templatetags/settings_value.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | 5 | Simple templatetag to return a value from the settings file. e.g., {% settings_value "LOGIN_REDIRECT_URL" %} 6 | """ 7 | 8 | import logging 9 | 10 | from django import template 11 | from django.conf import settings 12 | 13 | _log = logging.getLogger(__name__) 14 | 15 | register = template.Library() 16 | 17 | 18 | @register.simple_tag 19 | def settings_value(name): 20 | return getattr(settings, name, "") 21 | -------------------------------------------------------------------------------- /seed/test_helpers/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | import logging 7 | 8 | logging.disable(logging.DEBUG) 9 | -------------------------------------------------------------------------------- /seed/tests/data/2019-2020_Multiple Cycle Taxlots.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/2019-2020_Multiple Cycle Taxlots.xlsx -------------------------------------------------------------------------------- /seed/tests/data/2019-2020_Multiple Cycle Year only.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/2019-2020_Multiple Cycle Year only.xlsx -------------------------------------------------------------------------------- /seed/tests/data/Has_Meters_two_buildings.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/Has_Meters_two_buildings.xlsx -------------------------------------------------------------------------------- /seed/tests/data/Sample_MultipleCycles.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/Sample_MultipleCycles.xlsx -------------------------------------------------------------------------------- /seed/tests/data/access-level-instances.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/access-level-instances.xlsx -------------------------------------------------------------------------------- /seed/tests/data/access-levels-wrong1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/access-levels-wrong1.xlsx -------------------------------------------------------------------------------- /seed/tests/data/access-levels-wrong2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/access-levels-wrong2.xlsx -------------------------------------------------------------------------------- /seed/tests/data/access-levels-wrong3.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/access-levels-wrong3.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/Add_Bills_to_Meters.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/Add_Bills_to_Meters.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/Add_Meters.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/Add_Meters.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/Add_Properties_en.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/Add_Properties_en.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/BPS-sample-Targets-2019.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/BPS-sample-Targets-2019.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/BPS-sample-Targets-2020.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/BPS-sample-Targets-2020.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/BPS-sample-Targets-2021.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/BPS-sample-Targets-2021.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/BPS-sample-Targets-2022.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/BPS-sample-Targets-2022.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/BPS-sample-Targets-2023.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/BPS-sample-Targets-2023.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/CBL-building-performance-standards-sample-2019.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/CBL-building-performance-standards-sample-2019.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/CBL-building-performance-standards-sample-2020.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/CBL-building-performance-standards-sample-2020.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/CBL-building-performance-standards-sample-2021.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/CBL-building-performance-standards-sample-2021.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/CBL-building-performance-standards-sample-2022.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/CBL-building-performance-standards-sample-2022.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/CBL-building-performance-standards-sample-2023.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/CBL-building-performance-standards-sample-2023.xlsx -------------------------------------------------------------------------------- /seed/tests/data/bps/ESPM_BPS_Sample_Meter_Readings.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/bps/ESPM_BPS_Sample_Meter_Readings.xlsx -------------------------------------------------------------------------------- /seed/tests/data/covered-buildings-sample-with-errors.csv: -------------------------------------------------------------------------------- 1 | UBI,UBID,GBA,BLDGS,Address,Owner,City,State,Zip,Property Type,AYB_YearBuilt,Custom ID,PM Property ID 2 | 10107/71db4,86HJPCWQ+2VV-1-3-2-3,10000000000,1,120243 E True Lane,MileStone Community Builders,EnergyTown,Illinois,10107-7915,COMMERCIAL,0,, 3 | 10107/c6596,,"322,701",1,95373 E Peach Avenue,Pangea Properties,EnergyTown,Illinois,10107-1544,COMMERCIAL,1962,my-own-id, 4 | ,,512,1,123 Main Street,Longmont,EnergyTown,Colorado,80123,COMMERCIAL,1962,some-other-self-id, 5 | Perfect Record,86HJW6QJ+VFQ-1-2-3-4,248,1,1234 Peach Tree Avenue,Dark Roads Properties,EnergyTown,Illinois,10107-1544,COMMERCIAL,1962,my-own-id,my-pm-property 6 | -------------------------------------------------------------------------------- /seed/tests/data/example-bsyncr-plot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/example-bsyncr-plot.png -------------------------------------------------------------------------------- /seed/tests/data/example-data-request-response-new-format.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/example-data-request-response-new-format.xlsx -------------------------------------------------------------------------------- /seed/tests/data/example-data-request-response.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/example-data-request-response.xlsx -------------------------------------------------------------------------------- /seed/tests/data/example-pm-monthly-meter-usage-2-cost-meters.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/example-pm-monthly-meter-usage-2-cost-meters.xlsx -------------------------------------------------------------------------------- /seed/tests/data/example-pm-monthly-meter-usage-with-unknown-types-and-units.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/example-pm-monthly-meter-usage-with-unknown-types-and-units.xlsx -------------------------------------------------------------------------------- /seed/tests/data/example-pm-monthly-meter-usage.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/example-pm-monthly-meter-usage.xlsx -------------------------------------------------------------------------------- /seed/tests/data/example-sensor-metadata.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/example-sensor-metadata.xlsx -------------------------------------------------------------------------------- /seed/tests/data/example-sensor-readings-small-bad.csv: -------------------------------------------------------------------------------- 1 | timestamp,I'm not here,my_coolness_sensor,charisma_sensor_1,dex_sensor_1,intelligence_sensor 2 | 2021-10-22 16:30Z,8700000.8,20.7,61,670.9,asdf 3 | 2021-10-22 17:00Z,90.5,21.7,56.7,704.8,207.9 4 | 2021-10-22 17:15Z,90,20.8,59.2,654.1,163.8 5 | 22/12/2021 17:30Z,87.9,20,61.8,636.2,54.9 6 | 2021-10-22 17:45Z,89.5,20.7,60,653.9,69.2 7 | -------------------------------------------------------------------------------- /seed/tests/data/example-sensor-readings-small.csv: -------------------------------------------------------------------------------- 1 | timestamp,my_cuteness_sensor,my_coolness_sensor,charisma_sensor_1,dex_sensor_1,intelligence_sensor 2 | 2021-10-22 16:30Z,8700000.8,20.7,61,670.9,144.2 3 | 2021-10-22 17:00Z,90.5,21.7,56.7,704.8,207.9 4 | 2021-10-22 17:15Z,90,20.8,59.2,654.1,163.8 5 | 2021-10-22 17:30Z,87.9,20,61.8,636.2,54.9 6 | 2021-10-22 17:45Z,89.5,20.7,60,653.9,69.2 7 | -------------------------------------------------------------------------------- /seed/tests/data/mappings/covered-buildings-mapping-v2.csv: -------------------------------------------------------------------------------- 1 | Raw Columns,units,SEED Table,SEED Columns 2 | UBI,,TaxLotState,jurisdiction_tax_lot_id 3 | UBID,,PropertyState,ubid 4 | GBA,ft**2,PropertyState,gross_floor_area 5 | BLDGS,,PropertyState,building_count 6 | Address,,PropertyState,address_line_1 7 | Owner,,PropertyState,owner 8 | State,,PropertyState,state_province 9 | City,,PropertyState,city 10 | Zip,,PropertyState,postal_code 11 | Property Type,,PropertyState,use_description 12 | AYB_YearBuilt,,PropertyState,year_built 13 | Note,,PropertyState,property_notes 14 | -------------------------------------------------------------------------------- /seed/tests/data/mappings/covered-buildings-mapping.csv: -------------------------------------------------------------------------------- 1 | map_columns,,raw_columns, 2 | UBI,,TaxLotState,jurisdiction_tax_lot_id 3 | GBA,ft**2,PropertyState,gross_floor_area 4 | BLDGS,,PropertyState,building_count 5 | Address,,PropertyState,address_line_1 6 | Owner,,PropertyState,owner 7 | State,,PropertyState,state_province 8 | City,,PropertyState,city 9 | Zip,,PropertyState,postal_code 10 | Property Type,,PropertyState,use_description 11 | AYB_YearBuilt,,PropertyState,year_built 12 | -------------------------------------------------------------------------------- /seed/tests/data/portfolio-manager-sample-with-crlf.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/portfolio-manager-sample-with-crlf.xlsx -------------------------------------------------------------------------------- /seed/tests/data/portfolio-manager-sample.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/portfolio-manager-sample.xls -------------------------------------------------------------------------------- /seed/tests/data/portfolio-manager-sample.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/portfolio-manager-sample.xlsx -------------------------------------------------------------------------------- /seed/tests/data/portfolio-manager-single-22482007.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/portfolio-manager-single-22482007.xlsx -------------------------------------------------------------------------------- /seed/tests/data/system_meter_readings.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/system_meter_readings.xlsx -------------------------------------------------------------------------------- /seed/tests/data/test-document.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/tests/data/test-document.pdf -------------------------------------------------------------------------------- /seed/tests/data/test_datatype_mapping.csv: -------------------------------------------------------------------------------- 1 | Raw Column,Table Name,Field Name,Field Display Name,Field Data Type,Field Unit Type 2 | UBI,TaxLotState,jurisdiction_tax_lot_id,,, 3 | GBA,PropertyState,gross_floor_area,,, 4 | BLDGS,PropertyState,building_count,,, 5 | Address,PropertyState,address_line_1,,, 6 | Owner,PropertyState,owner,,, 7 | City,PropertyState,city,,Integer, 8 | State,PropertyState,state,,, 9 | Zip,PropertyState,postal_code,,, 10 | Property Type,PropertyState,property_type,,, 11 | AYB_YearBuilt,PropertyState,year_built,,, 12 | Custom ID,PropertyState,custom_id_1,,, 13 | PM Property ID,PropertyState,pm_property_id,,, 14 | New Note Field,PropertyState,new_note_field,,string, 15 | -------------------------------------------------------------------------------- /seed/tests/data/test_mapping.csv: -------------------------------------------------------------------------------- 1 | Raw Column,Table Name,Field Name,Field Display Name,Field Data Type,Field Unit Type 2 | UBI,TaxLotState,jurisdiction_tax_lot_id,,, 3 | GBA,PropertyState,gross_floor_area,,, 4 | BLDGS,PropertyState,building_count,,, 5 | Address,PropertyState,address_line_1,,, 6 | Owner,PropertyState,owner,,, 7 | City,PropertyState,city,,, 8 | State,PropertyState,state,,, 9 | Zip,PropertyState,postal_code,,, 10 | Property Type,PropertyState,property_type,,, 11 | AYB_YearBuilt,PropertyState,year_built,,, 12 | Custom ID,PropertyState,custom_id_1,,, 13 | PM Property ID,PropertyState,pm_property_id,,, 14 | -------------------------------------------------------------------------------- /seed/urls.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from django.urls import path 7 | 8 | from seed.views.main import home 9 | 10 | urlpatterns = [ 11 | path("", home, name="home"), 12 | ] 13 | -------------------------------------------------------------------------------- /seed/utils/CTS Facility Upload Template.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/utils/CTS Facility Upload Template.xlsx -------------------------------------------------------------------------------- /seed/utils/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/utils/facilities_plan_output.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/utils/facilities_plan_output.xlsx -------------------------------------------------------------------------------- /seed/utils/nocache.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | 6 | from django.utils.cache import add_never_cache_headers 7 | 8 | 9 | class DisableClientSideCachingMiddleware: 10 | def __init__(self, get_response): 11 | self.get_response = get_response 12 | 13 | def __call__(self, request): 14 | response = self.get_response(request) 15 | 16 | add_never_cache_headers(response) 17 | return response 18 | -------------------------------------------------------------------------------- /seed/utils/strings.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | 5 | :author nicholas.long@nrel.gov 6 | 7 | Methods to help with string parsing etc. 8 | """ 9 | 10 | from string import capwords 11 | 12 | 13 | def titlecase(s): 14 | # Titlelize the display names correctly per python's documentation. Don't use .title() 15 | # https://docs.python.org/2/library/stdtypes.html#str.title 16 | return capwords(s.replace("_", " ")) 17 | -------------------------------------------------------------------------------- /seed/views/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | SEED Platform (TM), Copyright (c) Alliance for Sustainable Energy, LLC, and other contributors. 3 | See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md 4 | """ 5 | -------------------------------------------------------------------------------- /seed/views/v3/data/PM Meter Data.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/views/v3/data/PM Meter Data.xlsx -------------------------------------------------------------------------------- /seed/views/v3/data/example-pm-monthly-meter-usage.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SEED-platform/seed/c0960f0f55e7d3f86b5384e0e4db3660d8988673/seed/views/v3/data/example-pm-monthly-meter-usage.xlsx --------------------------------------------------------------------------------