aa-moonmining 2.3.0__tar.gz → 3.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/PKG-INFO +11 -7
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/__init__.py +1 -1
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/constants.py +9 -4
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/core.py +5 -1
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/helpers.py +2 -1
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/management/commands/moonmining_calculate_all.py +2 -4
- aa_moonmining-3.0.0/moonmining/management/commands/moonmining_import_moons.py +136 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/management/commands/moonmining_load_eve.py +1 -3
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/managers.py +3 -10
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/models/extractions.py +1 -1
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/models/moons.py +5 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/models/notifications.py +33 -23
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/models/owners.py +198 -192
- aa_moonmining-3.0.0/moonmining/openapi_2025-12-16.json +32582 -0
- aa_moonmining-3.0.0/moonmining/providers.py +23 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tasks.py +27 -33
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/moon_details_products.html +1 -1
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/moons_tab.html +1 -1
- aa_moonmining-3.0.0/moonmining/tests/helpers.py +34 -0
- aa_moonmining-3.0.0/moonmining/tests/models/test_extractions.py +96 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/models/test_moons.py +137 -80
- aa_moonmining-3.0.0/moonmining/tests/models/test_notifications.py +161 -0
- aa_moonmining-3.0.0/moonmining/tests/models/test_owners.py +1036 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/test_admin.py +6 -8
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/test_core.py +2 -2
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/test_helpers.py +5 -3
- aa_moonmining-3.0.0/moonmining/tests/test_import_moons.py +170 -0
- aa_moonmining-3.0.0/moonmining/tests/test_integration.py +345 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/test_managers.py +77 -87
- aa_moonmining-3.0.0/moonmining/tests/testdata/factories.py +473 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/testdata/survey_data.py +1 -1
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/views/test_extractions.py +68 -119
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/views/test_general.py +91 -63
- aa_moonmining-3.0.0/moonmining/tests/views/test_moons.py +205 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/views/test_reports.py +59 -62
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/views/extractions.py +1 -1
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/views/general.py +1 -2
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/pyproject.toml +8 -6
- aa_moonmining-2.3.0/moonmining/management/commands/moonmining_import_moons.py +0 -214
- aa_moonmining-2.3.0/moonmining/providers.py +0 -7
- aa_moonmining-2.3.0/moonmining/tests/helpers.py +0 -82
- aa_moonmining-2.3.0/moonmining/tests/models/test_extractions.py +0 -222
- aa_moonmining-2.3.0/moonmining/tests/models/test_notifications.py +0 -45
- aa_moonmining-2.3.0/moonmining/tests/models/test_owners.py +0 -736
- aa_moonmining-2.3.0/moonmining/tests/test_commands.py +0 -80
- aa_moonmining-2.3.0/moonmining/tests/test_integration.py +0 -291
- aa_moonmining-2.3.0/moonmining/tests/testdata/allianceauth.json +0 -113
- aa_moonmining-2.3.0/moonmining/tests/testdata/create_eveuniverse.py +0 -43
- aa_moonmining-2.3.0/moonmining/tests/testdata/esi_client_stub.py +0 -54
- aa_moonmining-2.3.0/moonmining/tests/testdata/eveuniverse.json +0 -41782
- aa_moonmining-2.3.0/moonmining/tests/testdata/factories.py +0 -538
- aa_moonmining-2.3.0/moonmining/tests/testdata/load_allianceauth.py +0 -62
- aa_moonmining-2.3.0/moonmining/tests/testdata/load_eveuniverse.py +0 -37
- aa_moonmining-2.3.0/moonmining/tests/testdata/notification_details.py +0 -26
- aa_moonmining-2.3.0/moonmining/tests/views/test_moons.py +0 -168
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/LICENSE +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/README.md +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/admin.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/app_settings.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/apps.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/auth_hooks.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/forms.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/de/LC_MESSAGES/django.po +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/django.pot +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/en/LC_MESSAGES/django.po +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/es/LC_MESSAGES/django.po +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/fr_FR/LC_MESSAGES/django.po +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/it_IT/LC_MESSAGES/django.po +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/ja/LC_MESSAGES/django.po +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/ko_KR/LC_MESSAGES/django.po +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/ru/LC_MESSAGES/django.po +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/uk/LC_MESSAGES/django.po +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/management/commands/__init__.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/management/commands/moonstuff_export_moons.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/migrations/0001_initial.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/migrations/0002_add_mining_ledger.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/migrations/0003_mining_ledger_reports.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/migrations/0004_add_permission_moon_ledgers.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/migrations/0005_make_pricing_more_flexible.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/migrations/0006_add_labels.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/migrations/0007_add_localization.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/migrations/__init__.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/models/__init__.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/models/general.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/css/extractions.css +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/css/global.css +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/css/moonmining.css +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/css/moons.css +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/css/reports.css +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/img/Spinner-1s-64px-dark.gif +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/img/Spinner-1s-64px-light.gif +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/vendor/datatables/plugins/dataTables.rowGroup.min.js +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/vendor/datatables/plugins/datetime.js +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/vendor/datatables/plugins/filterDropDown.min.js +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/vendor/datatables/plugins/rowGroup.bootstrap.min.css +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/static/moonmining/vendor/datatables/plugins/rowGroup.dataTables.min.css +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/_generic_modal_page.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/base.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/extractions.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/modals/base.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/modals/content_base.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/modals/extraction_details.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/modals/extraction_ledger.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/modals/loader_body.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/modals/moon_details.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/modals/upload_survey.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/moons.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/extraction_details.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/extraction_details_head.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/extraction_details_head_base.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/extraction_details_products.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/extraction_ledger.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/extraction_ledger_characters.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/extraction_ledger_head.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/extraction_ledger_ledger.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/extractions_tab.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/global_js.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/location.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/menu.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/moon_details.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/moon_details_moon.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/reports_ore_prices_tab.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/reports_owned_value_tab.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/reports_user_mining_tab.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/reports_user_uploaded_tab.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/upload_survey.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/partials/value_estimate_legend.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/reports.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templates/moonmining/tests.html +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templatetags/__init__.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/templatetags/moonmining.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/__init__.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/models/__init__.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/test_templatetags.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/testdata/__init__.py +0 -0
- /aa_moonmining-2.3.0/moonmining/tests/testdata/esi.json → /aa_moonmining-3.0.0/moonmining/tests/testdata/esi_examples.json +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/testdata/generate_many_moons.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/testdata/generate_moons.json +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/testdata/generate_moons.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/testdata/moon_ids.csv +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/testdata/moon_survey_input_2.txt +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/testdata/moon_survey_input_3.txt +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/testdata/moons_for_import.csv +0 -0
- /aa_moonmining-2.3.0/moonmining/tests/testdata/notifications_full.json → /aa_moonmining-3.0.0/moonmining/tests/testdata/notification_examples.json +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tests/views/__init__.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tools/drop_tables.sql +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/tools/esi_notes.md +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/urls.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/views/__init__.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/views/_helpers.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/views/moons.py +0 -0
- {aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/views/reports.py +0 -0
|
@@ -1,36 +1,40 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aa-moonmining
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.0
|
|
4
4
|
Summary: Alliance Auth app for tracking moon extractions and scouting new moons.
|
|
5
5
|
Author-email: Erik Kalkoken <kaloken87@gmail.com>
|
|
6
|
-
Requires-Python: >=3.
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Classifier: Environment :: Web Environment
|
|
9
9
|
Classifier: Framework :: Django
|
|
10
10
|
Classifier: Framework :: Django :: 4.2
|
|
11
|
+
Classifier: Framework :: Django :: 5.2
|
|
11
12
|
Classifier: Intended Audience :: End Users/Desktop
|
|
12
13
|
Classifier: License :: OSI Approved :: MIT License
|
|
13
14
|
Classifier: Operating System :: OS Independent
|
|
14
15
|
Classifier: Programming Language :: Python
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.10
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
19
|
Classifier: Topic :: Internet :: WWW/HTTP
|
|
21
20
|
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
22
21
|
License-File: LICENSE
|
|
23
|
-
Requires-Dist: allianceauth-app-utils>=1.
|
|
24
|
-
Requires-Dist: allianceauth>=4,<
|
|
22
|
+
Requires-Dist: allianceauth-app-utils>=1.31
|
|
23
|
+
Requires-Dist: allianceauth>=4,<6
|
|
24
|
+
Requires-Dist: django-esi>=8,<10
|
|
25
25
|
Requires-Dist: django-bootstrap-form
|
|
26
26
|
Requires-Dist: django-datatables-view>=1.20
|
|
27
|
-
Requires-Dist: django-eveuniverse>=
|
|
27
|
+
Requires-Dist: django-eveuniverse>=2
|
|
28
28
|
Requires-Dist: django-navhelper
|
|
29
29
|
Requires-Dist: PyYAML
|
|
30
|
+
Requires-Dist: coverage ; extra == "test"
|
|
31
|
+
Requires-Dist: factory_boy ; extra == "test"
|
|
32
|
+
Requires-Dist: pook ; extra == "test"
|
|
30
33
|
Project-URL: Changelog, https://gitlab.com/ErikKalkoken/aa-moonmining/-/blob/master/CHANGELOG.md
|
|
31
34
|
Project-URL: Homepage, https://gitlab.com/ErikKalkoken/aa-moonmining
|
|
32
35
|
Project-URL: Source, https://gitlab.com/ErikKalkoken/aa-moonmining
|
|
33
36
|
Project-URL: Tracker, https://gitlab.com/ErikKalkoken/aa-moonmining/-/issues
|
|
37
|
+
Provides-Extra: test
|
|
34
38
|
|
|
35
39
|
# Moon Mining
|
|
36
40
|
|
|
@@ -7,19 +7,24 @@ class EveCategoryId(IntEnum):
|
|
|
7
7
|
"""An Eve category ID."""
|
|
8
8
|
|
|
9
9
|
ASTEROID = 25
|
|
10
|
+
CELESTIAL = 2
|
|
11
|
+
MATERIAL = 4
|
|
12
|
+
STRUCTURE = 65
|
|
10
13
|
|
|
11
14
|
|
|
12
15
|
class EveGroupId(IntEnum):
|
|
13
16
|
"""An Eve group ID."""
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
CITADEL = 1657
|
|
19
|
+
COMMON_MOON_ASTEROIDS = 1920
|
|
20
|
+
EXCEPTIONAL_MOON_ASTEROIDS = 1923
|
|
16
21
|
MINERAL = 18
|
|
22
|
+
MOON = 8
|
|
23
|
+
MOON_MATERIALS = 427
|
|
24
|
+
RARE_MOON_ASTEROIDS = 1922
|
|
17
25
|
REFINERY = 1406
|
|
18
26
|
UBIQUITOUS_MOON_ASTEROIDS = 1884
|
|
19
|
-
COMMON_MOON_ASTEROIDS = 1920
|
|
20
27
|
UNCOMMON_MOON_ASTEROIDS = 1921
|
|
21
|
-
RARE_MOON_ASTEROIDS = 1922
|
|
22
|
-
EXCEPTIONAL_MOON_ASTEROIDS = 1923
|
|
23
28
|
|
|
24
29
|
|
|
25
30
|
class EveTypeId(IntEnum):
|
|
@@ -100,7 +100,11 @@ class CalculatedExtractionProduct:
|
|
|
100
100
|
@classmethod
|
|
101
101
|
def create_list_from_dict(cls, ores: dict) -> List["CalculatedExtractionProduct"]:
|
|
102
102
|
"""Return list of newly created objs from a dict."""
|
|
103
|
-
|
|
103
|
+
lst = sorted(
|
|
104
|
+
[cls(ore_type_id, volume) for ore_type_id, volume in ores.items()],
|
|
105
|
+
key=lambda o: o.ore_type_id,
|
|
106
|
+
)
|
|
107
|
+
return lst
|
|
104
108
|
|
|
105
109
|
|
|
106
110
|
@dataclass
|
|
@@ -5,6 +5,7 @@ from collections import defaultdict
|
|
|
5
5
|
from typing import List
|
|
6
6
|
|
|
7
7
|
from django.utils.html import format_html
|
|
8
|
+
from esi.exceptions import HTTPError
|
|
8
9
|
from eveuniverse.models import EveEntity
|
|
9
10
|
|
|
10
11
|
from allianceauth.authentication.models import User
|
|
@@ -29,7 +30,7 @@ def eve_entity_get_or_create_esi_safe(id):
|
|
|
29
30
|
try:
|
|
30
31
|
entity, _ = EveEntity.objects.get_or_create_esi(id=id)
|
|
31
32
|
return entity
|
|
32
|
-
except
|
|
33
|
+
except HTTPError:
|
|
33
34
|
pass
|
|
34
35
|
return None
|
|
35
36
|
|
|
@@ -2,14 +2,12 @@ import logging
|
|
|
2
2
|
|
|
3
3
|
from django.core.management.base import BaseCommand
|
|
4
4
|
|
|
5
|
-
from
|
|
6
|
-
|
|
7
|
-
from moonmining import __title__, tasks
|
|
5
|
+
from moonmining import tasks
|
|
8
6
|
from moonmining.models import Extraction, Moon
|
|
9
7
|
|
|
10
8
|
from . import get_input
|
|
11
9
|
|
|
12
|
-
logger =
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
13
11
|
|
|
14
12
|
|
|
15
13
|
class Command(BaseCommand):
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import csv
|
|
2
|
+
from collections import defaultdict
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Dict, List
|
|
5
|
+
|
|
6
|
+
from django.core.management.base import BaseCommand, CommandError
|
|
7
|
+
from eveuniverse.core.esitools import is_esi_online
|
|
8
|
+
from eveuniverse.models import EveMoon
|
|
9
|
+
|
|
10
|
+
from allianceauth.services.hooks import get_extension_logger
|
|
11
|
+
|
|
12
|
+
from moonmining.core import CalculatedMoonProduct
|
|
13
|
+
from moonmining.models import EveOreType, Moon, MoonProduct
|
|
14
|
+
|
|
15
|
+
logger = get_extension_logger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Command(BaseCommand):
|
|
19
|
+
help = "Import moons from an CSV file."
|
|
20
|
+
|
|
21
|
+
def add_arguments(self, parser):
|
|
22
|
+
parser.add_argument("input_file", help="Path of CSV file to be imported")
|
|
23
|
+
parser.add_argument(
|
|
24
|
+
"--overwrite-existing",
|
|
25
|
+
action="store_const",
|
|
26
|
+
const=True,
|
|
27
|
+
default=False,
|
|
28
|
+
help="When set will overwrite existing moon surveys",
|
|
29
|
+
)
|
|
30
|
+
parser.add_argument(
|
|
31
|
+
"--disable-esi-check",
|
|
32
|
+
action="store_const",
|
|
33
|
+
const=False,
|
|
34
|
+
default=False,
|
|
35
|
+
help="When set script will not check if ESI is online",
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
def handle(self, *args, **options):
|
|
39
|
+
if not options["disable_esi_check"] and not is_esi_online():
|
|
40
|
+
raise CommandError("ESI if offline. Aborting")
|
|
41
|
+
|
|
42
|
+
input_file = Path(options["input_file"])
|
|
43
|
+
if not input_file.exists():
|
|
44
|
+
raise CommandError(
|
|
45
|
+
f"Could not find a file with the path: {input_file.resolve()}"
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
moons = self.read_moons(input_file)
|
|
49
|
+
total = len(moons.keys())
|
|
50
|
+
self.stdout.write(f"Read {total:,} moons from file.")
|
|
51
|
+
if not options["overwrite_existing"]:
|
|
52
|
+
found = self.remove_existing_moons(moons)
|
|
53
|
+
if found > 0:
|
|
54
|
+
self.stdout.write(
|
|
55
|
+
f"Skipping update of {found:,} moons with existing surveys."
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
total_2 = len(moons.keys())
|
|
59
|
+
self.stdout.write(f"Starting update of {total_2:,} moons.")
|
|
60
|
+
|
|
61
|
+
try:
|
|
62
|
+
self.update_moons(moons)
|
|
63
|
+
except KeyboardInterrupt:
|
|
64
|
+
self.stdout.write(self.style.WARNING("Aborted"))
|
|
65
|
+
|
|
66
|
+
self.stdout.write(self.style.SUCCESS("DONE"))
|
|
67
|
+
|
|
68
|
+
def read_moons(self, input_file: Path) -> Dict[int, List[CalculatedMoonProduct]]:
|
|
69
|
+
self.stdout.write(f"Importing moons from: {input_file} ...")
|
|
70
|
+
moons: Dict[int, List[CalculatedMoonProduct]] = defaultdict(list)
|
|
71
|
+
with input_file.open("r", encoding="utf-8") as fp:
|
|
72
|
+
csv_reader = csv.DictReader(fp)
|
|
73
|
+
for row in csv_reader:
|
|
74
|
+
try:
|
|
75
|
+
moon_id = int(row["moon_id"])
|
|
76
|
+
ore_type_id = int(row["ore_type_id"])
|
|
77
|
+
amount = float(row["amount"])
|
|
78
|
+
except KeyError:
|
|
79
|
+
continue
|
|
80
|
+
|
|
81
|
+
product = CalculatedMoonProduct(
|
|
82
|
+
ore_type_id=ore_type_id,
|
|
83
|
+
amount=amount,
|
|
84
|
+
)
|
|
85
|
+
moons[moon_id].append(product)
|
|
86
|
+
|
|
87
|
+
if not len(moons.keys()):
|
|
88
|
+
raise CommandError("Could not find any moons in the input file.")
|
|
89
|
+
|
|
90
|
+
return moons
|
|
91
|
+
|
|
92
|
+
def remove_existing_moons(
|
|
93
|
+
self, moons: Dict[int, List[CalculatedMoonProduct]]
|
|
94
|
+
) -> int:
|
|
95
|
+
existing = set(
|
|
96
|
+
Moon.objects.filter(products__isnull=False).values_list(
|
|
97
|
+
"eve_moon__id", flat=True
|
|
98
|
+
)
|
|
99
|
+
)
|
|
100
|
+
overlapping = existing.intersection(moons.keys())
|
|
101
|
+
removed = 0
|
|
102
|
+
for moon_id in overlapping:
|
|
103
|
+
del moons[moon_id]
|
|
104
|
+
removed += 1
|
|
105
|
+
|
|
106
|
+
return removed
|
|
107
|
+
|
|
108
|
+
def update_moons(self, moons: Dict[int, List[CalculatedMoonProduct]]):
|
|
109
|
+
amount = len(moons)
|
|
110
|
+
completed = 0
|
|
111
|
+
for eve_moon_id, products in moons.items():
|
|
112
|
+
created_ores = []
|
|
113
|
+
for p in products:
|
|
114
|
+
_, created = EveOreType.objects.get_or_create_esi(id=p.ore_type_id)
|
|
115
|
+
created_ores.append(created)
|
|
116
|
+
if any(created_ores):
|
|
117
|
+
EveOreType.objects.update_current_prices()
|
|
118
|
+
|
|
119
|
+
eve_moon, _ = EveMoon.objects.get_or_create_esi(id=eve_moon_id)
|
|
120
|
+
moon, _ = Moon.objects.get_or_create(eve_moon=eve_moon)
|
|
121
|
+
|
|
122
|
+
product_objects = []
|
|
123
|
+
for p in products:
|
|
124
|
+
product_objects.append(
|
|
125
|
+
MoonProduct(
|
|
126
|
+
moon_id=moon.id, ore_type_id=p.ore_type_id, amount=p.amount
|
|
127
|
+
)
|
|
128
|
+
)
|
|
129
|
+
moon.update_products(product_objects)
|
|
130
|
+
|
|
131
|
+
completed += 1
|
|
132
|
+
progress = round(completed / amount * 100, 1)
|
|
133
|
+
self.stdout.write(f"Updated: {str(moon):30} [Progress: {progress}%]")
|
|
134
|
+
logger.info(
|
|
135
|
+
"Added survey for moon ID %d with import command", moon.eve_moon.id
|
|
136
|
+
)
|
{aa_moonmining-2.3.0 → aa_moonmining-3.0.0}/moonmining/management/commands/moonmining_load_eve.py
RENAMED
|
@@ -3,15 +3,13 @@ from eveuniverse.models import EveType
|
|
|
3
3
|
from eveuniverse.tasks import update_or_create_eve_object
|
|
4
4
|
|
|
5
5
|
from allianceauth.services.hooks import get_extension_logger
|
|
6
|
-
from app_utils.logging import LoggerAddTag
|
|
7
6
|
|
|
8
|
-
from moonmining import __title__
|
|
9
7
|
from moonmining.constants import EveCategoryId
|
|
10
8
|
from moonmining.models import EveOreType
|
|
11
9
|
|
|
12
10
|
from . import get_input
|
|
13
11
|
|
|
14
|
-
logger =
|
|
12
|
+
logger = get_extension_logger(__name__)
|
|
15
13
|
|
|
16
14
|
|
|
17
15
|
class Command(BaseCommand):
|
|
@@ -17,9 +17,7 @@ from eveuniverse.models import EveMoon
|
|
|
17
17
|
|
|
18
18
|
from allianceauth.notifications import notify
|
|
19
19
|
from allianceauth.services.hooks import get_extension_logger
|
|
20
|
-
from app_utils.logging import LoggerAddTag
|
|
21
20
|
|
|
22
|
-
from . import __title__
|
|
23
21
|
from .app_settings import (
|
|
24
22
|
MOONMINING_REPROCESSING_YIELD,
|
|
25
23
|
MOONMINING_USE_REPROCESS_PRICING,
|
|
@@ -30,7 +28,7 @@ from .helpers import eve_entity_get_or_create_esi_safe
|
|
|
30
28
|
|
|
31
29
|
MAX_THREAD_WORKERS = 20
|
|
32
30
|
BULK_BATCH_SIZE = 500
|
|
33
|
-
logger =
|
|
31
|
+
logger = get_extension_logger(__name__)
|
|
34
32
|
|
|
35
33
|
SurveyProcessResult = namedtuple(
|
|
36
34
|
"SurveyProcessResult", ["moon_name", "success", "error_name"]
|
|
@@ -50,11 +48,12 @@ class EveOreTypeManger(EveTypeManager):
|
|
|
50
48
|
|
|
51
49
|
def update_current_prices(self, use_process_pricing: Optional[bool] = None):
|
|
52
50
|
"""Update current prices for all ores."""
|
|
53
|
-
from .models import EveOreTypeExtras
|
|
51
|
+
from .models import EveOreType, EveOreTypeExtras
|
|
54
52
|
|
|
55
53
|
if use_process_pricing is None:
|
|
56
54
|
use_process_pricing = MOONMINING_USE_REPROCESS_PRICING
|
|
57
55
|
|
|
56
|
+
obj: EveOreType
|
|
58
57
|
for obj in self.filter(published=True).select_related("market_price"):
|
|
59
58
|
if use_process_pricing:
|
|
60
59
|
price = obj.calc_refined_value_per_unit(MOONMINING_REPROCESSING_YIELD)
|
|
@@ -413,9 +412,3 @@ class ExtractionManagerBase(models.Manager):
|
|
|
413
412
|
|
|
414
413
|
|
|
415
414
|
ExtractionManager = ExtractionManagerBase.from_queryset(ExtractionQuerySet)
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
class RefineryManager(models.Manager):
|
|
419
|
-
def ids(self) -> set:
|
|
420
|
-
"""Return IDs of this queryset."""
|
|
421
|
-
return set(self.values_list("id", flat=True))
|
|
@@ -213,7 +213,7 @@ class Extraction(models.Model):
|
|
|
213
213
|
return self.duration.total_seconds() / (60 * 60 * 24)
|
|
214
214
|
|
|
215
215
|
@property
|
|
216
|
-
def
|
|
216
|
+
def status_2(self) -> "Extraction.Status":
|
|
217
217
|
"""Return current status as enum type."""
|
|
218
218
|
return self.Status(self.status)
|
|
219
219
|
|
|
@@ -120,6 +120,11 @@ class Moon(models.Model):
|
|
|
120
120
|
"""Return name of this moon."""
|
|
121
121
|
return self.eve_moon.name.replace("Moon ", "")
|
|
122
122
|
|
|
123
|
+
@property
|
|
124
|
+
def id(self) -> int:
|
|
125
|
+
"""Return id of this moon."""
|
|
126
|
+
return self.eve_moon.id
|
|
127
|
+
|
|
123
128
|
def region(self) -> EveRegion:
|
|
124
129
|
"""Return region."""
|
|
125
130
|
return self.solar_system().eve_constellation.eve_region
|
|
@@ -105,10 +105,10 @@ class Notification(models.Model):
|
|
|
105
105
|
|
|
106
106
|
def to_calculated_extraction(self) -> CalculatedExtraction:
|
|
107
107
|
"""Generate a calculated extraction from this notification."""
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
108
|
+
match self.notif_type:
|
|
109
|
+
case NotificationType.MOONMINING_EXTRACTION_STARTED:
|
|
110
|
+
params = {
|
|
111
|
+
"refinery_id": self.details["structureID"],
|
|
112
112
|
"status": CalculatedExtraction.Status.STARTED,
|
|
113
113
|
"chunk_arrival_at": ldap_time_2_datetime(self.details["readyTime"]),
|
|
114
114
|
"auto_fracture_at": ldap_time_2_datetime(self.details["autoTime"]),
|
|
@@ -118,23 +118,28 @@ class Notification(models.Model):
|
|
|
118
118
|
self.details["oreVolumeByType"]
|
|
119
119
|
),
|
|
120
120
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
|
|
122
|
+
case NotificationType.MOONMINING_EXTRACTION_CANCELLED:
|
|
123
|
+
params = {
|
|
124
|
+
"refinery_id": self.details["structureID"],
|
|
125
|
+
"status": CalculatedExtraction.Status.CANCELED,
|
|
126
|
+
"canceled_at": self.timestamp,
|
|
127
|
+
"canceled_by": self.details.get("cancelledBy"),
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
case NotificationType.MOONMINING_EXTRACTION_FINISHED:
|
|
131
|
+
params = {
|
|
132
|
+
"refinery_id": self.details["structureID"],
|
|
125
133
|
"status": CalculatedExtraction.Status.READY,
|
|
126
134
|
"auto_fracture_at": ldap_time_2_datetime(self.details["autoTime"]),
|
|
127
135
|
"products": CalculatedExtractionProduct.create_list_from_dict(
|
|
128
136
|
self.details["oreVolumeByType"]
|
|
129
137
|
),
|
|
130
138
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}:
|
|
136
|
-
params.update(
|
|
137
|
-
{
|
|
139
|
+
|
|
140
|
+
case NotificationType.MOONMINING_LASER_FIRED:
|
|
141
|
+
params = {
|
|
142
|
+
"refinery_id": self.details["structureID"],
|
|
138
143
|
"fractured_by": self.details.get("firedBy"),
|
|
139
144
|
"fractured_at": self.timestamp,
|
|
140
145
|
"status": CalculatedExtraction.Status.COMPLETED,
|
|
@@ -142,13 +147,18 @@ class Notification(models.Model):
|
|
|
142
147
|
self.details["oreVolumeByType"]
|
|
143
148
|
),
|
|
144
149
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
"
|
|
150
|
-
"
|
|
151
|
-
"
|
|
150
|
+
|
|
151
|
+
case NotificationType.MOONMINING_AUTOMATIC_FRACTURE:
|
|
152
|
+
params = {
|
|
153
|
+
"refinery_id": self.details["structureID"],
|
|
154
|
+
"fractured_at": self.timestamp,
|
|
155
|
+
"status": CalculatedExtraction.Status.COMPLETED,
|
|
156
|
+
"products": CalculatedExtractionProduct.create_list_from_dict(
|
|
157
|
+
self.details["oreVolumeByType"]
|
|
158
|
+
),
|
|
152
159
|
}
|
|
153
|
-
|
|
160
|
+
|
|
161
|
+
case _:
|
|
162
|
+
raise NotImplementedError(f"not implemented for: {self.notif_type}")
|
|
163
|
+
|
|
154
164
|
return CalculatedExtraction(**params)
|