aa-ledger 1.0.3__py3-none-any.whl → 1.0.4__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aa-ledger
3
- Version: 1.0.3
3
+ Version: 1.0.4
4
4
  Summary: Character and Corporation statistics, including detailed information on ESS, Ratting, Trading, Mining, and other activities.
5
5
  Project-URL: Changelog, https://github.com/Geuthur/aa-ledger/blob/master/CHANGELOG.md
6
6
  Project-URL: Documentation, https://github.com/Geuthur/aa-ledger/blob/master/README.md
@@ -880,6 +880,7 @@ The Following Settings can be setting up in the `local.py`
880
880
  - LEDGER_TASKS_TIME_LIMIT: `7200` - Defines the time (in seconds) a task will timeout
881
881
  - LEDGER_USE_COMPRESSED: `True` - Defines if Mining Ledger use Compressed Price or Raw
882
882
  - LEDGER_PRICE_PERCENTAGE: `0.9`- Defines Mining Price multiplier
883
+ - LEDGER_BULK_BATCH_SIZE: `500` - Maximum database batch size per operation. Reduce (e.g., 250) if encountering 'max_allowed_packet' errors, increase for better performance if MySQL is configured with higher limits
883
884
 
884
885
  Advanced Settings: Stale Status for Each Section
885
886
 
@@ -1,6 +1,6 @@
1
- ledger/__init__.py,sha256=a0ZsvLZJgzVjsYj6C10UnP_KFKlp6Lq1batQyZxM1-s,738
1
+ ledger/__init__.py,sha256=CqvTfQ4tXBorSY2Txr-ud5U3xjYeOMvbjJs5p3jnw4k,738
2
2
  ledger/admin.py,sha256=wp6nLps1tTGHznyHBLMoRnwjnYZW1RfXOnw4TfwRWhM,9408
3
- ledger/app_settings.py,sha256=r9CcNaBDo6kFOlYXXlRx3aTq1xErDz_JwJy7vM-mJNk,1363
3
+ ledger/app_settings.py,sha256=ibiryg_zX_QavmrM78dGq9q1hdXLEN3ulqoeZZ2_d0c,1842
4
4
  ledger/apps.py,sha256=XQxXGP-1xvmQqTRJYrVIuUgCwUPOdEW3iSZaxTOYvT0,442
5
5
  ledger/auth_hooks.py,sha256=yaOoOqfHqKoqcDm4eA-_wejIxvNIEcGa_glwHK-Sul0,1454
6
6
  ledger/checks.py,sha256=Sq-tfUyc_OElBi9Xj71DuJXBbRU0Zqu1XDSbEtp3bPI,1474
@@ -10,7 +10,7 @@ ledger/errors.py,sha256=IDXm1RCGnV2fRFHviTz2XkeMvgQiaWpaghtr0040ayc,225
10
10
  ledger/forms.py,sha256=Hghy3Jq-r9pQHYDqG-dzPpZIBGLDtcs7WGoZ2JTSRS8,3122
11
11
  ledger/hooks.py,sha256=ofua_eHg_ikCxaql8O7c3itSx2FyUhpeXJNH39asncA,15
12
12
  ledger/providers.py,sha256=PvqO-VOwmfk8E7YQDzZjvH5WBMtdlYImTVhvRw38TwM,619
13
- ledger/tasks.py,sha256=PV38aRj4cKnTxhwFE8V0uI02N4Hqs24eHcleMSzGjDw,16003
13
+ ledger/tasks.py,sha256=OMAzV_GjgGv9wOBsrHyjIy7Tn3mZg65p977DkKDYWi4,15834
14
14
  ledger/urls.py,sha256=PVG1uhNOR3uc5cQcLO33YbkJ2OccN3C1W6659_kRjiY,11281
15
15
  ledger/api/__init__.py,sha256=nVii8nkOCCMMAh87EPmVE-cIUr9VJffffguD02pC6pA,640
16
16
  ledger/api/helpers.py,sha256=SyoARfjY3hxlhbnXbVKmpbMsFXvH6k1lF2QiBmynaP0,4199
@@ -32,11 +32,11 @@ ledger/helpers/billboard.py,sha256=QWRGmaMU8pi5HjmQCHL1Lt4XUaTxWTNVpx-lo6_-64I,9
32
32
  ledger/helpers/character.py,sha256=ulbhajqxhiiLEABE8mvm1ZJ9qcE80MenILx55I6zs4M,9015
33
33
  ledger/helpers/core.py,sha256=tOX0uVnCSeai-pclk1FWP0G4ocOXh0PfBf7uo_PTgaM,23379
34
34
  ledger/helpers/corporation.py,sha256=PuNC6zbDh1xWQIOr1qBdLChaOTvybG4Ft9QZ77ZKFb8,15443
35
- ledger/helpers/data_exporter.py,sha256=F2Y0Tcy4iT6eaf8pRlOIYCgPfnyMYmFs2AAw87CnSF0,15882
35
+ ledger/helpers/data_exporter.py,sha256=jY_-Q0aIyXt1UomLwnMOH9WW_xms1kRdrY2-F55AbzM,15865
36
36
  ledger/helpers/discord.py,sha256=D59TBtPHAldCCWi2j_z1CzuW6140aP2kHYvgzgYwuP0,4427
37
37
  ledger/helpers/ref_type.py,sha256=BnRypVpSZmBaJbULWh9URJDlHrDnqRDoynd_nDSmdCo,16413
38
38
  ledger/locale/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- ledger/locale/django.pot,sha256=18TXnZxw57JmZOmDBfyQmK7CayfxnZWW2WaZM0_4hQk,29282
39
+ ledger/locale/django.pot,sha256=PCNuyeZRm6_eBeD6GXcn2lBL8IJ0W21i_fRhhhQvsUc,29043
40
40
  ledger/locale/cs_CZ/LC_MESSAGES/django.mo,sha256=UXCQbz2AxBvh-IQ7bGgjoBnijo8h9DfE9107A-2Mgkk,337
41
41
  ledger/locale/cs_CZ/LC_MESSAGES/django.po,sha256=t4zOmyU4olRysuGqYtaoHyn8Orp52jB5CUsKuqNHcUw,8505
42
42
  ledger/locale/de/LC_MESSAGES/django.mo,sha256=rDOXk4Xvewkagcm6DEQI-27mia_rKqypaUlJD41qObU,12151
@@ -64,12 +64,12 @@ ledger/locale/uk/LC_MESSAGES/django.po,sha256=iDL4l8Xdemb2IdfZW_-Kn0QNIGsnIL3l-M
64
64
  ledger/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=XMj5I8Aah7EGpU-KfFOr25hoOxxLT5dfmjror1-uc8g,373
65
65
  ledger/locale/zh_Hans/LC_MESSAGES/django.po,sha256=Du2iLaidsixOSJ1OnsM4s35Et1YEZ3AP8VHrVyTwcxo,8545
66
66
  ledger/managers/character_audit_manager.py,sha256=UoI1aeyLLkEDo9KBgtgYYmJXtPXmxld9ARDQlcNk6Bg,6797
67
- ledger/managers/character_journal_manager.py,sha256=9DlHtP8RHhvX507yNl4hWf7q6rFCXSMPMWLhOoqxx0Y,17681
68
- ledger/managers/character_mining_manager.py,sha256=EpKSQPOheqUTd3rF2tPv1gEc7Hf7Qf-YBvyQlPkvJJ0,8331
69
- ledger/managers/character_planetary_manager.py,sha256=DjkH6YovgzQIQlgMVP98nVrriPaDrbxIfsH8E24wfpQ,14906
67
+ ledger/managers/character_journal_manager.py,sha256=_f7IP-nBv_VGcDBvpOtVVpV1dWNZ5lIpo1gkyovHLqY,17771
68
+ ledger/managers/character_mining_manager.py,sha256=eu8OE1c66XwpTNxyW3I1ZU9w2TJWgHXvLaUgmZ1UydU,8583
69
+ ledger/managers/character_planetary_manager.py,sha256=fqukISpB8RKK9_t6hg_yeai-yEizfLK1tx0xT-PH1G4,15094
70
70
  ledger/managers/corporation_audit_manager.py,sha256=-_UN4V7N74B-3HajIdfupQnKrTgkrjMjYjJx5sUi5to,6471
71
- ledger/managers/corporation_journal_manager.py,sha256=ucOP14c9KKI0kpJqpKibMdYZVBZt5hfTYZhLCaS9-aA,13637
72
- ledger/managers/general_manager.py,sha256=oG6_Om3Lz1qQIQ3D4QPeMDP6UBf_uRQeMJ2ZajrLHwM,2669
71
+ ledger/managers/corporation_journal_manager.py,sha256=U4ta5KnHy9X7DYnBWk85z3gDPTxRyZS8gotx95-SNwY,13727
72
+ ledger/managers/general_manager.py,sha256=lv-pkvRdE_VkV8hthQRNpUPxTE4Bbb5jLLFHBc06tOE,2797
73
73
  ledger/migrations/0001_initial.py,sha256=SH3FFq5-azFP3pgemTIIBeraygM-z-siu4oC3tEaqUc,18987
74
74
  ledger/migrations/0002_delete_corpsteuer_alter_characteraudit_options_and_more.py,sha256=hOZi8yBmPigHW4pQ93z8hXrLnf6wCMoCD25WvSsbhR8,1454
75
75
  ledger/migrations/0003_alter_characteraudit_options_and_more.py,sha256=-7tDN8KmU_8bXEF3UU_8E0bkWfEWtpdncVPd3nxQDKA,1037
@@ -230,7 +230,7 @@ ledger/views/character/character_ledger.py,sha256=PX2tH6ZWJOf7YfOOJMtnF6BIrCRt7i
230
230
  ledger/views/character/planetary.py,sha256=zfcyxfs8x7B6DTZ4tViI8aO8fty94JhphTb9bd73Xr8,4459
231
231
  ledger/views/corporation/add_corp.py,sha256=1SLMITOZ5GdBuk4VSkduaxiS5mNgP9aObsJ1SwYMUOQ,1837
232
232
  ledger/views/corporation/corporation_ledger.py,sha256=xzmSjn8wccAhb__MsiEoDswjhRsw2RbY0afNEDBFB5g,14008
233
- aa_ledger-1.0.3.dist-info/METADATA,sha256=40cttGFsrPO-VlaxSXtzgg3FrxEUJZox5XrzqpVQ0HY,50804
234
- aa_ledger-1.0.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
235
- aa_ledger-1.0.3.dist-info/licenses/LICENSE,sha256=2oHuqnDfrjCrYAM1--Wyhv8jO3VBpnrq8zkABGzB8N8,35109
236
- aa_ledger-1.0.3.dist-info/RECORD,,
233
+ aa_ledger-1.0.4.dist-info/METADATA,sha256=kTgxDDMMbQFfeXGK4h2_tHjxPB8aZB6ZwZyleEb_Gx4,51019
234
+ aa_ledger-1.0.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
235
+ aa_ledger-1.0.4.dist-info/licenses/LICENSE,sha256=2oHuqnDfrjCrYAM1--Wyhv8jO3VBpnrq8zkABGzB8N8,35109
236
+ aa_ledger-1.0.4.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
ledger/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Initialize the app"""
2
2
 
3
- __version__ = "1.0.3"
3
+ __version__ = "1.0.4"
4
4
  __title__ = "Ledger"
5
5
 
6
6
  __package_name__ = "aa-ledger"
ledger/app_settings.py CHANGED
@@ -48,3 +48,11 @@ LEDGER_PRICE_PERCENTAGE = clean_setting("LEDGER_PRICE_PERCENTAGE", 0.9)
48
48
  LEDGER_CACHE_STALE = 60 * 60 * 168 # 168 hours
49
49
  LEDGER_CACHE_KEY = "LEDGER"
50
50
  LEDGER_CACHE_ENABLED = True
51
+
52
+ # Maximum Number of Objects processed per run of DJANGO Batch Method
53
+ # Controls how many database records are inserted in a single batch operation.
54
+ # If you encounter "Got a packet bigger than 'max_allowed_packet' bytes" errors,
55
+ # reduce this value (e.g., to 250 or 100).
56
+ # Can be increased for better performance if your MySQL max_allowed_packet setting
57
+ # is configured higher (default is usually 16-64MB).
58
+ LEDGER_BULK_BATCH_SIZE = clean_setting("LEDGER_BULK_BATCH_SIZE", 500)
@@ -66,14 +66,14 @@ def export_ledger_to_archive(
66
66
  exporter = LedgerCSVExporter.create_exporter(
67
67
  ledger_type, entity_id, division_id, year, month
68
68
  )
69
- try:
70
- with tempfile.TemporaryDirectory() as temp_dirname:
71
- csv_file = exporter.write_to_file(temp_dirname)
72
- destination = default_destination()
73
- zip_file_path = file_to_zip(csv_file, destination)
74
- except ValueError as ve:
75
- logger.debug("Error exporting ledger to archive: %s", ve)
76
- return f"{ve}"
69
+ if not exporter.has_data:
70
+ return None
71
+ logger.info("Exporting %s", exporter.output_basename)
72
+ # Create File
73
+ with tempfile.TemporaryDirectory() as temp_dirname:
74
+ csv_file = exporter.write_to_file(temp_dirname)
75
+ destination = default_destination()
76
+ zip_file_path = file_to_zip(csv_file, destination)
77
77
  gc.collect()
78
78
  return str(zip_file_path)
79
79
 
ledger/locale/django.pot CHANGED
@@ -6,9 +6,9 @@
6
6
  #, fuzzy
7
7
  msgid ""
8
8
  msgstr ""
9
- "Project-Id-Version: AA Ledger 1.0.3\n"
9
+ "Project-Id-Version: AA Ledger 1.0.4\n"
10
10
  "Report-Msgid-Bugs-To: https://github.com/Geuthur/aa-ledger/issues\n"
11
- "POT-Creation-Date: 2025-11-16 18:48+0100\n"
11
+ "POT-Creation-Date: 2025-12-03 07:19+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -201,8 +201,8 @@ msgid "Costs"
201
201
  msgstr ""
202
202
 
203
203
  #: ledger/helpers/billboard.py:56
204
- #: ledger/managers/corporation_journal_manager.py:362
205
- #: ledger/managers/corporation_journal_manager.py:386
204
+ #: ledger/managers/corporation_journal_manager.py:363
205
+ #: ledger/managers/corporation_journal_manager.py:387
206
206
  msgid "Unknown"
207
207
  msgstr ""
208
208
 
@@ -241,7 +241,7 @@ msgstr ""
241
241
  msgid "Structure Rental"
242
242
  msgstr ""
243
243
 
244
- #: ledger/managers/corporation_journal_manager.py:360
244
+ #: ledger/managers/corporation_journal_manager.py:361
245
245
  msgid "Master Wallet"
246
246
  msgstr ""
247
247
 
@@ -360,17 +360,6 @@ msgid ""
360
360
  "the Data Export page."
361
361
  msgstr ""
362
362
 
363
- #: ledger/tasks.py:478
364
- msgid "{ledger_type.capitalize()} Data Export Failed"
365
- msgstr ""
366
-
367
- #: ledger/tasks.py:480
368
- #, python-brace-format
369
- msgid ""
370
- "Your data export for topic {ledger_type} has failed with following error: "
371
- "{msg}"
372
- msgstr ""
373
-
374
363
  #: ledger/templates/ledger/admin.html:17
375
364
  #: ledger/templates/ledger/allyledger/admin/alliance_administration.html:17
376
365
  #: ledger/templates/ledger/allyledger/alliance_ledger.html:61
@@ -15,6 +15,7 @@ from app_utils.logging import LoggerAddTag
15
15
 
16
16
  # AA Ledger
17
17
  from ledger import __title__
18
+ from ledger.app_settings import LEDGER_BULK_BATCH_SIZE
18
19
  from ledger.decorators import log_timing
19
20
  from ledger.helpers.ref_type import RefTypeManager
20
21
  from ledger.providers import esi
@@ -421,7 +422,7 @@ class CharWalletQuerySet(CharWalletCostQueryFilter):
421
422
  created_names = EveEntity.objects.create_bulk_from_esi(_new_names)
422
423
 
423
424
  if created_names:
424
- self.bulk_create(items)
425
+ self.bulk_create(items, batch_size=LEDGER_BULK_BATCH_SIZE)
425
426
  else:
426
427
  raise TokenError("ESI Fail")
427
428
 
@@ -24,7 +24,7 @@ from eveuniverse.models import EveSolarSystem, EveType
24
24
 
25
25
  # AA Ledger
26
26
  from ledger import __title__
27
- from ledger.app_settings import LEDGER_PRICE_PERCENTAGE
27
+ from ledger.app_settings import LEDGER_BULK_BATCH_SIZE, LEDGER_PRICE_PERCENTAGE
28
28
  from ledger.decorators import log_timing
29
29
  from ledger.providers import esi
30
30
 
@@ -213,10 +213,14 @@ class CharacterMiningLedgerEntryManagerBase(models.Manager):
213
213
  EveSolarSystem.objects.bulk_get_or_create_esi(ids=list(system_ids))
214
214
 
215
215
  if new_events:
216
- self.bulk_create(new_events, ignore_conflicts=True)
216
+ self.bulk_create(
217
+ new_events, batch_size=LEDGER_BULK_BATCH_SIZE, ignore_conflicts=True
218
+ )
217
219
 
218
220
  if old_events:
219
- self.bulk_update(old_events, fields=["quantity"])
221
+ self.bulk_update(
222
+ old_events, fields=["quantity"], batch_size=LEDGER_BULK_BATCH_SIZE
223
+ )
220
224
 
221
225
  self._update_mining_price(character)
222
226
 
@@ -238,7 +242,11 @@ class CharacterMiningLedgerEntryManagerBase(models.Manager):
238
242
  updated_entries.append(entry)
239
243
 
240
244
  if updated_entries:
241
- self.bulk_update(updated_entries, fields=["price_per_unit"])
245
+ self.bulk_update(
246
+ updated_entries,
247
+ fields=["price_per_unit"],
248
+ batch_size=LEDGER_BULK_BATCH_SIZE,
249
+ )
242
250
 
243
251
  logger.debug(
244
252
  f"Updated prices for {len(updated_entries)}({character.character_name}) mining ledger entries."
@@ -15,6 +15,7 @@ from eveuniverse.models import EvePlanet, EveType
15
15
 
16
16
  # AA Ledger
17
17
  from ledger import __title__
18
+ from ledger.app_settings import LEDGER_BULK_BATCH_SIZE
18
19
  from ledger.constants import COMMAND_CENTER, EXTRACTOR_CONTROL_UNIT, SPACEPORTS
19
20
  from ledger.decorators import log_timing
20
21
  from ledger.models.characteraudit import CharacterAudit
@@ -119,9 +120,13 @@ class PlanetaryManagerBase(models.Manager):
119
120
  _planets_update.append(planet)
120
121
 
121
122
  if _planets_new:
122
- self.bulk_create(_planets_new)
123
+ self.bulk_create(_planets_new, batch_size=LEDGER_BULK_BATCH_SIZE)
123
124
  if _planets_update:
124
- self.bulk_update(_planets_update, fields=["upgrade_level", "num_pins"])
125
+ self.bulk_update(
126
+ _planets_update,
127
+ fields=["upgrade_level", "num_pins"],
128
+ batch_size=LEDGER_BULK_BATCH_SIZE,
129
+ )
125
130
 
126
131
  # Delete Planets that are no longer in the list
127
132
  obsolete_planets = set(_current_planets) - set(_planets_ids)
@@ -16,6 +16,7 @@ from app_utils.logging import LoggerAddTag
16
16
 
17
17
  # AA Ledger
18
18
  from ledger import __title__
19
+ from ledger.app_settings import LEDGER_BULK_BATCH_SIZE
19
20
  from ledger.decorators import log_timing
20
21
  from ledger.errors import DatabaseError
21
22
  from ledger.helpers.ref_type import RefTypeManager
@@ -264,7 +265,7 @@ class CorporationWalletManagerBase(models.Manager):
264
265
  created_names = EveEntity.objects.create_bulk_from_esi(_new_names)
265
266
 
266
267
  if created_names:
267
- self.bulk_create(items)
268
+ self.bulk_create(items, batch_size=LEDGER_BULK_BATCH_SIZE)
268
269
  else:
269
270
  raise DatabaseError("DB Fail")
270
271
 
@@ -13,6 +13,7 @@ from app_utils.logging import LoggerAddTag
13
13
 
14
14
  # AA Ledger
15
15
  from ledger import __title__
16
+ from ledger.app_settings import LEDGER_BULK_BATCH_SIZE
16
17
  from ledger.providers import esi
17
18
 
18
19
  logger = LoggerAddTag(get_extension_logger(__name__), __title__)
@@ -58,7 +59,9 @@ class EveEntityManager(models.Manager):
58
59
  category=entity.category,
59
60
  )
60
61
  )
61
- EveEntity.objects.bulk_create(new_names, ignore_conflicts=True)
62
+ EveEntity.objects.bulk_create(
63
+ new_names, batch_size=LEDGER_BULK_BATCH_SIZE, ignore_conflicts=True
64
+ )
62
65
  return True
63
66
  return True
64
67
 
ledger/tasks.py CHANGED
@@ -469,21 +469,16 @@ def export_data_ledger(
469
469
  logger.debug("User with pk %s does not exist", user_pk)
470
470
  return
471
471
 
472
- if not msg:
472
+ if msg is not None:
473
473
  title = _(f"{ledger_type.capitalize()} Data Export Ready")
474
474
  message = _(
475
475
  f"Your data export for topic {ledger_type} is ready. You can download it from the Data Export page.",
476
476
  )
477
- else:
478
- title = _(f"{ledger_type.capitalize()} Data Export Failed")
479
- message = _(
480
- f"Your data export for topic {ledger_type} has failed with following error: {msg}",
481
- )
482
477
 
483
- send_user_notification.delay(
484
- user_id=user.pk,
485
- title=title,
486
- message=message,
487
- embed_message=True,
488
- level="info",
489
- )
478
+ send_user_notification.delay(
479
+ user_id=user.pk,
480
+ title=title,
481
+ message=message,
482
+ embed_message=True,
483
+ level="info",
484
+ )