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)
Exemple #2
0
 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)
Exemple #5
0
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])