Loading cog/actions.py +9 −3 Original line number Diff line number Diff line Loading @@ -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) Loading cogdb/query.py +48 −1 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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. Loading cogdb/schema.py +3 −3 Original line number Diff line number Diff line Loading @@ -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) Loading tests/cogdb/test_query.py +20 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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] Loading Loading
cog/actions.py +9 −3 Original line number Diff line number Diff line Loading @@ -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) Loading
cogdb/query.py +48 −1 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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. Loading
cogdb/schema.py +3 −3 Original line number Diff line number Diff line Loading @@ -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) Loading
tests/cogdb/test_query.py +20 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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] Loading