Loading cog/actions.py +17 −4 Original line number Diff line number Diff line Loading @@ -73,7 +73,7 @@ async def check_mentions(coro, *args, **kwargs): await coro(*args, **kwargs) def check_sheet(scanner_name, attr, user_cls): def check_sheet(scanner_name, attr, user_cls, sheet_src=None): """ Check if user present in sheet. """ @decorator.decorator async def inner(coro, *args, **kwargs): Loading @@ -84,8 +84,10 @@ def check_sheet(scanner_name, attr, user_cls): self.duser.display_name, user_cls.__name__, self.duser.pref_name) sheet = cogdb.query.add_sheet_user( self.session, cls=user_cls, discord_user=self.duser, start_row=get_scanner(scanner_name).user_row start_row=get_scanner(scanner_name).user_row, sheet_src=sheet_src ) if sheet_src: sheet.sheet_src = sheet_src self.payloads += get_scanner(scanner_name).__class__.update_sheet_user_dict( sheet.row, sheet.cry, sheet.name) Loading Loading @@ -1058,8 +1060,14 @@ class Hold(Action): return ([hold], response) @check_mentions @check_sheet('hudson_undermine', 'um_user', UMUser) @check_sheet('hudson_undermine', 'um_user', UMUser, sheet_src=EUMSheet.main) async def before_execute(self): """ Decorate this async func to avoid multiple decorators. """ async def execute(self): await self.before_execute() self.log.info('HOLD %s - Matched self.duser with id %s and sheet name %s.', self.duser.display_name, self.duser.id, self.undermine) Loading Loading @@ -1110,7 +1118,12 @@ class SnipeHold(Hold): """ SnipeHold, same as Hold but for snipe sheet. """ pass @check_mentions @check_sheet('hudson_snipe', 'snipe_user', UMUser, sheet_src=EUMSheet.snipe) async def before_execute(self): """ Decorate this async func to avoid multiple decorators. """ class KOS(Action): Loading cogdb/query.py +9 −4 Original line number Diff line number Diff line Loading @@ -167,12 +167,16 @@ def check_pref_name(session, new_name): pass def next_sheet_row(session, *, cls, start_row): def next_sheet_row(session, *, cls, start_row, sheet_src=None): """ Find the next available row to add in the sheet based on entries. """ next_row = start_row rows = [x[0] for x in session.query(cls.row).order_by(cls.row).all()] query = session.query(cls.row) if sheet_src: query = query.filter(cls.sheet_src == sheet_src) query = query.order_by(cls.row) rows = [x[0] for x in query.all()] if rows: complete_list = list(range(rows[0], rows[-1] + 2)) next_row = sorted(list(set(complete_list) - set(rows)))[0] Loading @@ -180,7 +184,7 @@ def next_sheet_row(session, *, cls, start_row): return next_row def add_sheet_user(session, *, cls, discord_user, start_row): def add_sheet_user(session, *, cls, discord_user, start_row, sheet_src=None): """ Add a fort sheet user to system based on a Member. Loading @@ -188,8 +192,9 @@ def add_sheet_user(session, *, cls, discord_user, start_row): cls: The class of the sheet user like FortUser. duser: The DiscordUser object of the requesting user. start_row: Starting row if none inserted. sheet_src: Optionally, the sheet_src to filter UMUsers against. """ next_row = next_sheet_row(session, cls=cls, start_row=start_row) next_row = next_sheet_row(session, cls=cls, start_row=start_row, sheet_src=sheet_src) user = cls(name=discord_user.pref_name, cry=discord_user.pref_cry, row=next_row) session.add(user) session.commit() Loading cogdb/schema.py +10 −2 Original line number Diff line number Diff line Loading @@ -67,11 +67,19 @@ class DiscordUser(Base): ) um_user = sqla.orm.relationship( 'UMUser', uselist=False, viewonly=True, primaryjoin='foreign(DiscordUser.pref_name) == UMUser.name' primaryjoin="and_(foreign(DiscordUser.pref_name) == UMUser.name, UMUser.sheet_src == 'main')" ) um_merits = sqla_orm.relationship( 'UMHold', lazy='select', uselist=True, viewonly=True, primaryjoin='and_(foreign(DiscordUser.pref_name) == remote(UMUser.name), foreign(UMUser.id) == UMHold.user_id)' primaryjoin="and_(foreign(DiscordUser.pref_name) == remote(UMUser.name), foreign(UMUser.id) == UMHold.user_id, UMUser.sheet_src == 'main')" ) snipe_user = sqla.orm.relationship( 'UMUser', uselist=False, viewonly=True, primaryjoin="and_(foreign(DiscordUser.pref_name) == UMUser.name, UMUser.sheet_src == 'snipe')" ) snipe_merits = sqla_orm.relationship( 'UMHold', lazy='select', uselist=True, viewonly=True, primaryjoin="and_(foreign(DiscordUser.pref_name) == remote(UMUser.name), foreign(UMUser.id) == UMHold.user_id, UMUser.sheet_src == 'snipe')" ) def __repr__(self): Loading tests/cog/test_inara.py +3 −3 Original line number Diff line number Diff line Loading @@ -92,7 +92,7 @@ async def test_friendly_detector_already_in_kos(f_bot): async def test_friendly_detector_canceled(f_bot): api = cog.inara.InaraApi() f_msg = fake_msg_gears('!whois Prozer') emoji_cancel = "\u274C" emoji_cancel = cog.util.CONF.emojis._no f_bot.wait_for.async_return_value = emoji_cancel, None cmdr = {"name": "Prozer", "allegiance": "Federation"} is_friendly_returned, squad_returned = await api.friendly_detector(cmdr, False, [], f_msg) Loading @@ -104,7 +104,7 @@ async def test_friendly_detector_canceled(f_bot): async def test_friendly_detector_friendly_no_squad(f_bot): api = cog.inara.InaraApi() f_msg = fake_msg_gears('!whois Prozer') emoji_friendly = "\U0001F7E2" emoji_friendly = cog.util.CONF.emojis._friendly f_bot.wait_for.async_return_value = emoji_friendly, None cmdr = {"name": "Prozer", "allegiance": "Federation"} is_friendly_returned, squad_returned = await api.friendly_detector(cmdr, False, [], f_msg) Loading @@ -116,7 +116,7 @@ async def test_friendly_detector_friendly_no_squad(f_bot): @pytest.mark.asyncio async def test_friendly_detector_hostile_with_squad(f_bot): api = cog.inara.InaraApi() emoji_hostile = "\U0001F534" emoji_hostile = cog.util.CONF.emojis._hostile f_bot.wait_for.async_return_value = emoji_hostile, None f_msg = fake_msg_gears('!whois Akeno') cmdr = {"name": "Akeno", "allegiance": "Empire", "squad": "Test"} Loading tests/secrethub/secretConfig.yml +0 −16 Original line number Diff line number Diff line Loading @@ -14,12 +14,6 @@ dbs: discord: dev: NotUsed emojis: _no: "\u274C" _yes: "\u2705" _friendly: "\U0001F7E2" _hostile: "\U0001F534" inara: proto_header: # Test inara appName: CogBotTest Loading @@ -32,16 +26,6 @@ pastebin: user: {{starcraftman/cogbot/paste/user}} pass: {{starcraftman/cogbot/paste/pass}} # Internal paths to important files. Relative project root, no need to edit. paths: log_conf: data/log.yml service_json: data/service_sheets.json # Used for the scheduler hook incoming from sheets, advanced topic. Ignore for now. ports: sanic: 8000 # nginx passthru -> web.app (sanic server) zmq: 9000 # see web.app -> cog.schedule # Don't touch these at all, they are used for unit testing. You should build test around existing. scanners: hudson_cattle: Loading Loading
cog/actions.py +17 −4 Original line number Diff line number Diff line Loading @@ -73,7 +73,7 @@ async def check_mentions(coro, *args, **kwargs): await coro(*args, **kwargs) def check_sheet(scanner_name, attr, user_cls): def check_sheet(scanner_name, attr, user_cls, sheet_src=None): """ Check if user present in sheet. """ @decorator.decorator async def inner(coro, *args, **kwargs): Loading @@ -84,8 +84,10 @@ def check_sheet(scanner_name, attr, user_cls): self.duser.display_name, user_cls.__name__, self.duser.pref_name) sheet = cogdb.query.add_sheet_user( self.session, cls=user_cls, discord_user=self.duser, start_row=get_scanner(scanner_name).user_row start_row=get_scanner(scanner_name).user_row, sheet_src=sheet_src ) if sheet_src: sheet.sheet_src = sheet_src self.payloads += get_scanner(scanner_name).__class__.update_sheet_user_dict( sheet.row, sheet.cry, sheet.name) Loading Loading @@ -1058,8 +1060,14 @@ class Hold(Action): return ([hold], response) @check_mentions @check_sheet('hudson_undermine', 'um_user', UMUser) @check_sheet('hudson_undermine', 'um_user', UMUser, sheet_src=EUMSheet.main) async def before_execute(self): """ Decorate this async func to avoid multiple decorators. """ async def execute(self): await self.before_execute() self.log.info('HOLD %s - Matched self.duser with id %s and sheet name %s.', self.duser.display_name, self.duser.id, self.undermine) Loading Loading @@ -1110,7 +1118,12 @@ class SnipeHold(Hold): """ SnipeHold, same as Hold but for snipe sheet. """ pass @check_mentions @check_sheet('hudson_snipe', 'snipe_user', UMUser, sheet_src=EUMSheet.snipe) async def before_execute(self): """ Decorate this async func to avoid multiple decorators. """ class KOS(Action): Loading
cogdb/query.py +9 −4 Original line number Diff line number Diff line Loading @@ -167,12 +167,16 @@ def check_pref_name(session, new_name): pass def next_sheet_row(session, *, cls, start_row): def next_sheet_row(session, *, cls, start_row, sheet_src=None): """ Find the next available row to add in the sheet based on entries. """ next_row = start_row rows = [x[0] for x in session.query(cls.row).order_by(cls.row).all()] query = session.query(cls.row) if sheet_src: query = query.filter(cls.sheet_src == sheet_src) query = query.order_by(cls.row) rows = [x[0] for x in query.all()] if rows: complete_list = list(range(rows[0], rows[-1] + 2)) next_row = sorted(list(set(complete_list) - set(rows)))[0] Loading @@ -180,7 +184,7 @@ def next_sheet_row(session, *, cls, start_row): return next_row def add_sheet_user(session, *, cls, discord_user, start_row): def add_sheet_user(session, *, cls, discord_user, start_row, sheet_src=None): """ Add a fort sheet user to system based on a Member. Loading @@ -188,8 +192,9 @@ def add_sheet_user(session, *, cls, discord_user, start_row): cls: The class of the sheet user like FortUser. duser: The DiscordUser object of the requesting user. start_row: Starting row if none inserted. sheet_src: Optionally, the sheet_src to filter UMUsers against. """ next_row = next_sheet_row(session, cls=cls, start_row=start_row) next_row = next_sheet_row(session, cls=cls, start_row=start_row, sheet_src=sheet_src) user = cls(name=discord_user.pref_name, cry=discord_user.pref_cry, row=next_row) session.add(user) session.commit() Loading
cogdb/schema.py +10 −2 Original line number Diff line number Diff line Loading @@ -67,11 +67,19 @@ class DiscordUser(Base): ) um_user = sqla.orm.relationship( 'UMUser', uselist=False, viewonly=True, primaryjoin='foreign(DiscordUser.pref_name) == UMUser.name' primaryjoin="and_(foreign(DiscordUser.pref_name) == UMUser.name, UMUser.sheet_src == 'main')" ) um_merits = sqla_orm.relationship( 'UMHold', lazy='select', uselist=True, viewonly=True, primaryjoin='and_(foreign(DiscordUser.pref_name) == remote(UMUser.name), foreign(UMUser.id) == UMHold.user_id)' primaryjoin="and_(foreign(DiscordUser.pref_name) == remote(UMUser.name), foreign(UMUser.id) == UMHold.user_id, UMUser.sheet_src == 'main')" ) snipe_user = sqla.orm.relationship( 'UMUser', uselist=False, viewonly=True, primaryjoin="and_(foreign(DiscordUser.pref_name) == UMUser.name, UMUser.sheet_src == 'snipe')" ) snipe_merits = sqla_orm.relationship( 'UMHold', lazy='select', uselist=True, viewonly=True, primaryjoin="and_(foreign(DiscordUser.pref_name) == remote(UMUser.name), foreign(UMUser.id) == UMHold.user_id, UMUser.sheet_src == 'snipe')" ) def __repr__(self): Loading
tests/cog/test_inara.py +3 −3 Original line number Diff line number Diff line Loading @@ -92,7 +92,7 @@ async def test_friendly_detector_already_in_kos(f_bot): async def test_friendly_detector_canceled(f_bot): api = cog.inara.InaraApi() f_msg = fake_msg_gears('!whois Prozer') emoji_cancel = "\u274C" emoji_cancel = cog.util.CONF.emojis._no f_bot.wait_for.async_return_value = emoji_cancel, None cmdr = {"name": "Prozer", "allegiance": "Federation"} is_friendly_returned, squad_returned = await api.friendly_detector(cmdr, False, [], f_msg) Loading @@ -104,7 +104,7 @@ async def test_friendly_detector_canceled(f_bot): async def test_friendly_detector_friendly_no_squad(f_bot): api = cog.inara.InaraApi() f_msg = fake_msg_gears('!whois Prozer') emoji_friendly = "\U0001F7E2" emoji_friendly = cog.util.CONF.emojis._friendly f_bot.wait_for.async_return_value = emoji_friendly, None cmdr = {"name": "Prozer", "allegiance": "Federation"} is_friendly_returned, squad_returned = await api.friendly_detector(cmdr, False, [], f_msg) Loading @@ -116,7 +116,7 @@ async def test_friendly_detector_friendly_no_squad(f_bot): @pytest.mark.asyncio async def test_friendly_detector_hostile_with_squad(f_bot): api = cog.inara.InaraApi() emoji_hostile = "\U0001F534" emoji_hostile = cog.util.CONF.emojis._hostile f_bot.wait_for.async_return_value = emoji_hostile, None f_msg = fake_msg_gears('!whois Akeno') cmdr = {"name": "Akeno", "allegiance": "Empire", "squad": "Test"} Loading
tests/secrethub/secretConfig.yml +0 −16 Original line number Diff line number Diff line Loading @@ -14,12 +14,6 @@ dbs: discord: dev: NotUsed emojis: _no: "\u274C" _yes: "\u2705" _friendly: "\U0001F7E2" _hostile: "\U0001F534" inara: proto_header: # Test inara appName: CogBotTest Loading @@ -32,16 +26,6 @@ pastebin: user: {{starcraftman/cogbot/paste/user}} pass: {{starcraftman/cogbot/paste/pass}} # Internal paths to important files. Relative project root, no need to edit. paths: log_conf: data/log.yml service_json: data/service_sheets.json # Used for the scheduler hook incoming from sheets, advanced topic. Ignore for now. ports: sanic: 8000 # nginx passthru -> web.app (sanic server) zmq: 9000 # see web.app -> cog.schedule # Don't touch these at all, they are used for unit testing. You should build test around existing. scanners: hudson_cattle: Loading