Commit 40612901 authored by Jeremy Pallats's avatar Jeremy Pallats 💬
Browse files

FIX #121: Addum Systems Not Shown In !um

- Inject new systems added directly into db, avoids scheduler.
parent 3d82a490
Loading
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -483,16 +483,22 @@ class Admin(Action):
                            ["UM Trigger {}%".format(reinforcement_value), reinforced_trigger],
                            ["Priority", priority]
                        ])
                        values.append({"sys_name": system.name, "power": power[0], "trigger": reinforced_trigger,
                                      "priority": priority})
                        values.append({
                            "power": power[0],
                            "priority": priority,
                            "sys_name": system.name,
                            "security": system.security.text,
                            "trigger": reinforced_trigger,
                        })
                    else:
                        found_list.append(system.name)

        if values:
            cogdb.query.um_add_system_targets(self.session, values)
            um_sheet = await um_scanner.get_batch(['D1:13'], 'COLUMNS', 'FORMULA')
            data = cogdb.scanners.UMScanner.slide_templates(um_sheet, values)
            await um_scanner.send_batch(data, input_opt='USER_ENTERED')
            self.bot.sched.schedule("hudson_undermine", 1)

            msgs = cog.util.merge_msgs_to_least(msgs)
            for msg in cog.util.merge_msgs_to_least(msgs):
                await self.bot.send_message(self.msg.channel, msg)
+48 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ import cog.util
import cogdb.eddb
from cog.util import substr_match
from cogdb.schema import (DiscordUser, FortSystem, FortPrep, FortDrop, FortUser, FortOrder,
                          EFortType, UMSystem, UMUser, UMHold, EUMSheet, KOS,
                          EFortType, UMSystem, UMUser, UMHold, EUMSheet, EUMType, KOS,
                          AdminPerm, ChannelPerm, RolePerm,
                          TrackSystem, TrackSystemCached, TrackByID, OCRTracker, OCRTrigger,
                          OCRPrep, Global, Vote)
@@ -568,6 +568,53 @@ def um_redeem_systems(session, user, systems, *, sheet_src=EUMSheet.main):
    return (holds, total)


def um_add_system_targets(session, um_systems):
    """
    Given a set of um targets, add them to the database.

    Args:
        session: A session onto the db.
        um_systems: A list of dictionary objects of form:
            {
                "sys_name": system.name,
                "power": power[0],
                "security": security,
                "trigger": reinforced_trigger,
                "priority": priority,
            }
    """
    last = session.query(UMSystem).\
        filter(UMSystem.sheet_src == EUMSheet.main).\
        order_by(UMSystem.id.desc()).\
        limit(1).\
        all()

    next_id = 1
    next_col = cog.sheets.Column("D")
    if last:
        next_id = last[0].id
        # Each new addition 2 past last col, set to next position
        next_col = cog.sheets.Column(last[0].sheet_col)

    systems = []
    with cogdb.session_scope(cogdb.EDDBSession) as eddb_session:
        for sys in um_systems:
            nearest_control = cogdb.eddb.get_nearest_controls(eddb_session, centre_name=sys['sys_name'])[0]
            next_id += 1
            systems.append(UMSystem(
                sheet_src=EUMSheet.main,
                type=EUMType.control,
                name=sys['sys_name'],
                sheet_col=next_col.offset(2),
                close_control=nearest_control.name,
                security=sys.pop('security'),
                goal=sys['trigger'],
                notes=sys['power'],
                priority=sys['priority'],
            ))
    session.add_all(systems)


def um_add_hold(session, *, sheet_src=EUMSheet.main, **kwargs):
    """
    Add or update the user's Hold, that is their UM merits held or redeemed.
+3 −3
Original line number Diff line number Diff line
@@ -657,9 +657,9 @@ class UMSystem(Base):
    security = sqla.Column(sqla.String(LEN_NAME), default='')
    notes = sqla.Column(sqla.String(LEN_NAME), default='')
    close_control = sqla.Column(sqla.String(LEN_NAME), default='')
    priority = sqla.Column(sqla.String(LEN_NAME))
    progress_us = sqla.Column(sqla.Integer)
    progress_them = sqla.Column(sqla.Float)
    priority = sqla.Column(sqla.String(LEN_NAME), default="Normal")
    progress_us = sqla.Column(sqla.Integer, default=0)
    progress_them = sqla.Column(sqla.Float, default=0.0)
    map_offset = sqla.Column(sqla.Integer, default=0)
    exp_trigger = sqla.Column(sqla.Integer, default=0)

+20 −1
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ import pytest
import cog.exc
import cogdb
from cogdb.schema import (DiscordUser, FortSystem, FortUser, FortOrder,
                          UMUser, UMHold, EUMSheet, AdminPerm, ChannelPerm, RolePerm,
                          UMUser, UMSystem, UMHold, EUMSheet, AdminPerm, ChannelPerm, RolePerm,
                          KOS, TrackSystem, TrackSystemCached, TrackByID,
                          OCRTracker, OCRTrigger, OCRPrep, Global, Vote, EVoteType)
import cogdb.query
@@ -337,6 +337,25 @@ def test_um_redeem_merits(session, f_dusers, f_um_testbed):
    assert user.merit_summary() == 'Holding 0, Redeemed 13950'


def test_um_add_system_targets(session, f_dusers, f_um_testbed):
    um_systems = [{
        "sys_name": "Ross 860",
        "power": "Edmund Mahon",
        "security": "Low",
        "trigger": 15000,
        "priority": "Normal",
    }]

    cogdb.query.um_add_system_targets(session, um_systems)
    session.commit()
    result = session.query(UMSystem).\
        filter(UMSystem.name == um_systems[0]['sys_name']).\
        one()

    assert result
    assert result.close_control == "Vega"


def test_um_add_hold(session, f_dusers, f_um_testbed):
    user = f_um_testbed[0][1]
    system = f_um_testbed[1][0]