Skip to content
This repository was archived by the owner on Dec 31, 2025. It is now read-only.

Commit 7be015c

Browse files
committed
Added DARC XMAS and CWA contest
1 parent bca5d54 commit 7be015c

3 files changed

Lines changed: 89 additions & 1 deletion

File tree

AVAILABLE_CONTESTS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ The sent exchange is handled automatically.
1919
| DARC UKW Frühlingswettbewerb | DARC-UKW-FRUEHLING | ***2025*** | 2025-04-07 | Number,Locator |
2020
| DARC UKW-Sommer-Fieldday | DARC-UKW-SOMMERFD | ***2025*** | 2025-08-02 | Number,Locator |
2121
| DARC-Ostercontest | DARC-KW-OSTERN | ***2025*** | 2025-04-13 | DOK |
22+
| DARC Weihnachtscontest | DARC-XMAS | ***2025*** | 2025-08-29 | DOK |
23+
| DARC CW Ausbildungscontest | DARC-CWA | ***2025*** | 2025-08-29 | DOK |
2224
| RLP Aktivitätswoche | RL-PFALZ-AW | ***2025*** | 2025-01-05 | DOK |
2325
| RLP Aktivitätsabend UKW | RL-PFALZ-AB.UKW | ***2025*** | 2025-05-08 | DOK,Locator |
2426
| RLP Aktivitätsabend KW | RL-PFALZ-AB.KW | ***2025*** | 2025-05-08 | DOK |

dragonlog/contest/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
# To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/
33

44
from .base import ContestLog, ExchangeData, ContestLogCBR, ContestLogEDI
5-
from .contests_darc import DARCUKWContest, DARCUKWFruehlingsContest, DARCOsterContest, DARCUKWSommerFDContest
5+
from .contests_darc import (DARCUKWContest, DARCUKWFruehlingsContest, DARCOsterContest, DARCUKWSommerFDContest,
6+
DARCXMASContest, DARCCWAContest)
67
from .contests_darc_rlp import RLPFALZAWLog, RLPFALZABKWLog, RLPFALZABUKWLog, K32KurzUKWLog
78
from .contests_darc_others import L33EinsteigerContest
89
from .contests_others import IARUHFWorldChampionshipContest, RussianDistrictAwardContest
@@ -12,6 +13,8 @@
1213
'DARC-UKW-FRUEHLING': DARCUKWFruehlingsContest,
1314
'DARC-UKW-SOMMERFD': DARCUKWSommerFDContest,
1415
'DARC-KW-OSTERN': DARCOsterContest,
16+
'DARC-XMAS': DARCXMASContest,
17+
'DARC-CWA': DARCCWAContest,
1518
'RL-PFALZ-AW': RLPFALZAWLog,
1619
'RL-PFALZ-AB.UKW': RLPFALZABUKWLog,
1720
'RL-PFALZ-AB.KW': RLPFALZABKWLog,

dragonlog/contest/contests_darc.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,86 @@ def extract_exchange(exchange: str) -> ExchangeData | None:
204204
@staticmethod
205205
def prepare_exchange(exchange: ExchangeData):
206206
return f'{exchange.darc_dok}'
207+
208+
209+
class DARCXMASContest(ContestLogCBR):
210+
contest_name = 'DARC Weihnachtscontest'
211+
contest_year = '2025'
212+
contest_update = '2025-08-29'
213+
contest_exch_fmt = 'DOK'
214+
215+
def __init__(self, callsign: str, name: str, club: str, address: Address, email: str, locator: str,
216+
band: type[CategoryBand], mode: type[CategoryMode],
217+
pwr: type[CategoryPower] = CategoryPower.HIGH,
218+
cat_operator: type[CategoryOperator] = CategoryOperator.SINGLE_OP,
219+
assisted: type[CategoryAssisted] = CategoryAssisted.NON_ASSISTED,
220+
tx: type[CategoryTransmitter] = CategoryTransmitter.ONE,
221+
operators: list[str] = None, specific: str = '', skip_id: bool = False,
222+
skip_warn: bool = False, logger=None, cty=None):
223+
super().__init__(callsign, name, club, address, email, locator,
224+
band, mode, pwr, cat_operator,
225+
assisted, tx, operators, specific, skip_id, skip_warn, logger, cty)
226+
227+
self.__band_multis__: dict[str, set[str]] = {'80m': set(), '40m': set()}
228+
self.__band_multis2__: dict[str, set[str]] = {'80m': set(), '40m': set()}
229+
230+
@classmethod
231+
def valid_modes(cls) -> tuple[CategoryMode, ...]:
232+
return CategoryMode.MIXED, CategoryMode.SSB, CategoryMode.CW
233+
234+
@classmethod
235+
def valid_bands(cls) -> tuple[CategoryBand, ...]:
236+
return CategoryBand.B_ALL, CategoryBand.B_80M, CategoryBand.B_40M
237+
238+
@classmethod
239+
def descr_specific(cls) -> str:
240+
return 'DOK'
241+
242+
def process_points(self, rec: CBRRecord):
243+
# noinspection PyBroadException
244+
try:
245+
qso_point = 1
246+
247+
self.__rated__ += 1
248+
band = BAND_FROM_CBR[rec.band]
249+
250+
if rec.rcvd_exch.upper() != 'NM':
251+
self.__multis__.add(rec.rcvd_exch.upper())
252+
self.__band_multis__[band].add(rec.rcvd_exch.upper())
253+
else:
254+
self.info(f'DOK not counted as multi "{rec.rcvd_exch.upper()}"')
255+
256+
if self.cty:
257+
pfx = self.cty.prefix(rec.call)
258+
if pfx:
259+
self.__multis2__.add(pfx)
260+
self.__band_multis2__[band].add(pfx)
261+
else:
262+
self.log.warning('Could not process prefix due to missing cty data')
263+
264+
self.__points__ += qso_point
265+
266+
self.__stats__[band].qsos += 1
267+
self.__stats__[band].rated += 1
268+
self.__stats__[band].points += qso_point
269+
self.__stats__[band].multis = len(self.__band_multis__[band])
270+
self.__stats__[band].multis2 = len(self.__band_multis2__[band])
271+
272+
self.__header__['CLAIMED-SCORE'] = str(self.claimed_points)
273+
except Exception:
274+
self.exception()
275+
276+
277+
class DARCCWAContest(DARCXMASContest):
278+
contest_name = 'DARC CW Ausbildungscontest'
279+
contest_year = '2025'
280+
contest_update = '2025-08-29'
281+
contest_exch_fmt = 'DOK'
282+
283+
@classmethod
284+
def valid_modes(cls) -> tuple[CategoryMode, ...]:
285+
return CategoryMode.CW,
286+
287+
@classmethod
288+
def valid_bands(cls) -> tuple[CategoryBand, ...]:
289+
return CategoryBand.B_80M,

0 commit comments

Comments
 (0)