|
| 1 | +""" |
| 2 | +CQP contest |
| 3 | +https://www.cqp.org/ |
| 4 | +""" |
| 5 | +import re |
| 6 | + |
| 7 | +MY_STATE = None |
| 8 | + |
| 9 | +CA_COUNTIES = ['ALAM', 'ALPI', 'AMAD', 'BUTT', 'CALA', 'COLU', 'CCOS', 'DELN', |
| 10 | + 'ELDO', 'FRES', 'GLEN', 'HUMB', 'IMPE', 'INYO', 'KERN', 'KING', 'LAKE', |
| 11 | + 'LASS', 'LANG', 'MADE', 'MARN', 'MARP', 'MEND', 'MERC', 'MODO', 'MONO', |
| 12 | + 'MONT', 'NAPA', 'NEVA', 'ORAN', 'PLAC', 'PLUM', 'RIVE', 'SACR', 'SBEN', |
| 13 | + 'SBER', 'SDIE', 'SFRA', 'SJOA', 'SLUI', 'SMAT', 'SBAR', 'SCLA', 'SCRU', |
| 14 | + 'SHAS', 'SIER', 'SISK', 'SOLA', 'SONO', 'STAN', 'SUTT', 'TEHA', 'TRIN', |
| 15 | + 'TULA', 'TUOL', 'VENT', 'YOLO', 'YUBA'] |
| 16 | + |
| 17 | +STATES = ['AL', 'AK', 'AZ', 'AR', |
| 18 | +# 'CA' -- The first valid QSO logged with 4-letter county abbreviation will count as the multiplier for California. |
| 19 | +'CO', 'CT', 'DE', 'FL', 'GA', 'HI', 'ID', 'IL', 'IN', 'IA', 'KS', 'KY', |
| 20 | +'LA', 'ME', 'MD', 'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE', 'NV', 'NH', |
| 21 | +'NJ', 'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', |
| 22 | +'TN', 'TX', 'UT', 'VT', 'VA', 'WA', 'WV', 'WI', 'WY', |
| 23 | +# Canada |
| 24 | +'AB', 'BC', 'MB', 'NB', 'NL', 'NT', 'NS', 'NU', 'ON', 'PE', 'QC', 'SK', 'YT' |
| 25 | +] |
| 26 | + |
| 27 | +MULT_PATTERN = re.compile('[A-Z\s]+$') # trailing block of letters and spaces |
| 28 | + |
| 29 | +def init(cfg): |
| 30 | + global MY_STATE |
| 31 | + MY_STATE = cfg |
| 32 | + |
| 33 | +def check_exchange(qso): |
| 34 | + m = MULT_PATTERN.search(qso.exchange) |
| 35 | + if m: |
| 36 | + parts = m.group(0).split() |
| 37 | + else: |
| 38 | + parts = [] |
| 39 | + |
| 40 | + mult = '' |
| 41 | + |
| 42 | + if MY_STATE == 'CA': |
| 43 | + if len(parts) == 0: # no value |
| 44 | + pass |
| 45 | + elif len(parts) == 1: # single value |
| 46 | + part = parts[0] |
| 47 | + if part in STATES: |
| 48 | + mult = part |
| 49 | + elif part in CA_COUNTIES: |
| 50 | + mult = 'CA' |
| 51 | + else: # multiple values, all must be valid CA counties |
| 52 | + ok = True |
| 53 | + for part in parts: |
| 54 | + if part not in CA_COUNTIES: |
| 55 | + ok = False |
| 56 | + if ok: |
| 57 | + mult = 'CA' |
| 58 | + else: # Non-California Station |
| 59 | + for part in parts: |
| 60 | + if part in CA_COUNTIES: |
| 61 | + mult += part + ' ' |
| 62 | + |
| 63 | + return {'mult1_value': mult} |
0 commit comments