def test_unblocked_key_with_latest_end_timestamp_is_picked(self): m, = MakerAdminClient.response_data_to_members([ dict( member_id=1, member_number=1001, firstname="Kim", lastname="Larsson", end_date="2018-05-28", keys=[ dict( key_id=4, rfid_tag="4", ), dict( key_id=2, rfid_tag="2", ), dict( key_id=1, rfid_tag="1", ), dict( key_id=3, rfid_tag="3", ), ], ) ]) self.assertEqual("4", m.rfid_tag)
def setUp(self): super().setUp() self.client = MakerAdminClient(base_url="https://makeradmin.se") self.client.is_logged_in = MagicMock(return_value=True) self.client.login = MagicMock(return_value=True) self.client.ship_orders = MagicMock(return_value=None) self.ui = Tui()
def test_parse_valid_member(self): m, = MakerAdminClient.response_data_to_members([valid_member]) self.assertEqual(1001, m.member_number) self.assertEqual("Kim", m.firstname) self.assertEqual("Larsson", m.lastname) self.assertEqual("123213433334", m.rfid_tag) self.assertEqual(datetime(2018, 5, 28, 23, 59, 59), m.end_timestamp)
def test_parse_valid_with_no_end_timestamp(self): obj = deepcopy(valid_member) obj['end_date'] = None m, = MakerAdminClient.response_data_to_members([obj]) self.assertEqual(1001, m.member_number) self.assertEqual("Kim", m.firstname) self.assertEqual("Larsson", m.lastname) self.assertEqual("123213433334", m.rfid_tag) self.assertEqual(None, m.end_timestamp)
def main(): basicConfig( format= '%(asctime)s %(levelname)s [%(process)d/%(threadName)s %(pathname)s:%(lineno)d]: %(message)s', stream=sys.stderr, level=INFO) parser = argparse.ArgumentParser( "Fetches member list from makeradmin.se or local file, then prompt user with" f" changes to make. Built from source revision {source_revision}.", formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument( "-d", "--db", default= 'mssql://(local)\\SQLEXPRESS/MultiAccess?trusted_connection=yes&driver=SQL+Server', help="SQL Alchemy db engine spec.") parser.add_argument( "-w", "--what", default=",".join(WHAT_ALL), help=f"What to update, comma separated list." f" '{WHAT_ORDERS}' tell maker admin to perform order actions before updating members." f" '{WHAT_UPDATE}' will update end times and rfid_tag." f" '{WHAT_ADD}' will add members in MultAccess." f" '{WHAT_BLOCK}' will block members that should not have access.") parser.add_argument( "-u", "--maker-admin-base-url", default='https://api.makerspace.se', help="Base url of maker admin (for login and fetching of member info)." ) parser.add_argument( "-m", "--members-filename", default=None, help= "Provide members in a file instead of fetching from maker admin (same format as response" " from maker admin).") parser.add_argument( "-t", "--token", default="", help="Provide token on command line instead of prompting for login.") parser.add_argument( "--customer-id", default=16, type=int, help="MultiAcces custoemr primary key to use to get and add users.") parser.add_argument( "--authority-id", default=23, type=int, help="MultiAcces authority primary key to add ny default to new users." ) parser.add_argument( "--ignore-running", action='store_true', help="Ignore the check for if MultiAcces is running, do not use this.") args = parser.parse_args() what = args.what.split(',') for w in what: if w not in WHAT_ALL: raise argparse.ArgumentError(f"Unknown argument '{w}' to what.") with Tui() as ui: client = MakerAdminClient(ui=ui, base_url=args.maker_admin_base_url, members_filename=args.members_filename, token=args.token) ui.info__progress(f"connecting to {args.db}") engine = create_engine(args.db) while True: Session = sessionmaker(bind=engine) session = Session() sync(session=session, ui=ui, client=client, customer_id=args.customer_id, authority_id=args.authority_id, ignore_running=args.ignore_running, what=what) session.close() ui.prompt__run_again()
def test_no_keys_is_filtered(self): obj = deepcopy(valid_member) obj['keys'] = [] self.assertEqual([], MakerAdminClient.response_data_to_members([obj]))
def test_bad_key(**kwargs): obj = deepcopy(valid_member) obj['keys'][0].update(kwargs) with self.assertRaises(ValueError): MakerAdminClient.response_data_to_members([obj])