def main(arguments): parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('--list-servers', help="Put this flag to simply list the available servers. This overrides other flags.", action='store_true', default=False) parser.add_argument('-r', '--refresh_data', help="Put this flag to refresh the resources classes list. This overrides other flags.", action='store_true', default=False) parser.add_argument('-v', '--view_classes', help="Read the classes list.", action='store_true', default=False) parser.add_argument('-u', '--url', help="This value can override the default url (SWGAide) not recommended since this tool is designed to work with SWGAide.", type=str, default='https://swgaide.com/') parser.add_argument( '-s', '--server', help="The SWG server number. Use flag '--list-servers' to find your server.", type=int, required=True) # TODO: add the possibility to override the output file. # parser.add_argument('-o', '--outfile', help="The output file to generate the resources.", # default='resources.pickle', type=argparse.FileType('w')) args = parser.parse_args(arguments) if args.list_servers: print_server_list(args.url) elif args.view_classes: print_classes() elif args.refresh_data or not os.path.isfile('swg-grm-extractor/data/classes.pkl'): classes = get_resources_classes('http://www.swgcraft.org/') mapping = get_resources_mapping('http://www.swgcraft.org/') aggregate_classes(classes, mapping) else: get_resources(args.url, args.server)
def _get_pods_for_service(self, service_name, namespace): pod_list = [] platf = platform.system() kubeplus_home = os.getenv('KUBEPLUS_HOME', '/') cmd = '' if platf == "Darwin": cmd = kubeplus_home + '/plugins/kubediscovery-macos connections Service ' + service_name + ' ' + namespace + ' -o json' if platf == "Linux": cmd = kubeplus_home + '/plugins/kubediscovery-linux connections Service ' + service_name + ' ' + namespace + ' -o json' if cmd: output = '' try: output = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).communicate()[0] output = output.decode('utf-8') except Exception as e: print(e) if output: try: json_output = json.loads(output) except Exception as e: print(e) pod_list = utils.get_pods(json_output) res_list = utils.get_resources(json_output) #pod_list = self._parse_pods_from_connections_op(output) return pod_list, res_list
def test_message_records_completed(client, mocker): """Test message records processing with handling the complition of the task.""" admin = client.data["admin"] user = OrcidToken.select().join(User).where( User.orcid.is_null(False)).first().user org = user.organisation mocker.patch( "orcid_hub.orcid_client.MemberAPIV3.get_resources", return_value=get_resources(org=user.organisation, user=user), ) send = mocker.patch("emails.message.MessageSendMixin.send") execute = mocker.patch( "orcid_hub.orcid_client.MemberAPIV3.execute", return_value=Mock(headers={"Location": f"{user.orcid}/ABC/123456"}, json=dict(visibility="public")), ) task = Task.create( is_active=True, created_by=admin, filename="messages.json", task_type=TaskType.RESOURCE, is_raw=True, org=org, ) record = MessageRecord.create(task=task, message="{}", is_active=True) invitee = Invitee.create(email=user.email, orcid=user.orcid) record.invitees.add(invitee) record.save() utils.process_message_records(record_id=record.id) send.assert_called_once() MessageRecord.update(processed_at=None).execute() Invitee.update(processed_at=None).execute() send_email = mocker.patch("orcid_hub.utils.send_email") utils.process_message_records(record_id=record.id) send_email.assert_called_once() args, _ = send_email.call_args assert args[0] == "email/task_completed.html" assert Task.get(task.id).completed_at is not None
def test_message_records(client, mocker): """Test message records processing.""" user = client.data["admin"] client.login(user, follow_redirects=True) raw_data0 = readup_test_data("resources.json") resp = client.post( "/load/task/RESOURCE", data={"file_": (BytesIO(raw_data0), "resources.json")}, follow_redirects=True, ) assert resp.status_code == 200 assert b"SYN-18-UOA-333" in resp.data assert b"SYN-18-UOA-222" in resp.data # assert b"*****@*****.**" in resp.data # assert b"*****@*****.**" in resp.data task = Task.get(filename="resources.json") assert task.records.count() == 2 send = mocker.patch("emails.message.MessageSendMixin.send") get_resources_mock = mocker.patch( "orcid_hub.orcid_client.MemberAPIV3.get_resources", return_value=get_resources(org=user.organisation, user=user), ) execute = mocker.patch("orcid_hub.orcid_client.MemberAPIV3.execute") resp = client.post("/activate_all/?url=/resources", data=dict(task_id=task.id)) assert resp.status_code == 302 assert resp.location.endswith("/resources") get_resources_mock.assert_called() execute.assert_called() send.assert_called() assert UserInvitation.select().count() == 3 # via task view - activate all: UserInvitation.delete().execute() MessageRecord.update(is_active=False).execute() resp = client.post("/admin/task/action/", data=dict(action="activate", rowid=[task.id])) assert resp.status_code == 302 assert resp.location.endswith("/admin/task/") assert UserInvitation.select().count() == 3 # via task view - reset all: UserInvitation.delete().execute() resp = client.post("/admin/task/action/", data=dict(action="reset", rowid=[task.id])) assert resp.status_code == 302 assert resp.location.endswith("/admin/task/") assert UserInvitation.select().count() == 3 # Edit invitees for r in task.records: for i in r.invitees: resp = client.get(f"/admin/invitee/details/?id={i.id}") resp = client.post( f"/admin/invitee/edit/?id={i.id}&url=/admin/invitee/%2F%3Frecord_id={r.id}", data=dict( identifier=f"ID-{i.id}", # email="*****@*****.**", first_name=i.first_name or "FN", last_name=i.first_name or "LN", visibility="limited", ), follow_redirects=True, ) resp = client.get(f"/admin/invitee/details/?id={i.id}") invitee = Invitee.get(i.id) assert invitee.identifier == f"ID-{i.id}" invitee_count = r.invitees.count() resp = client.post( f"/admin/invitee/new/?url=/admin/invitee/%2F%3Frecord_id={r.id}", data=dict( email="*****@*****.**", first_name="FN", last_name="LN", visibility="limited", ), ) assert r.invitees.count() == invitee_count + 1 # Export and re-import for export_type in ["json", "yaml"]: resp = client.get( f"/admin/messagerecord/export/{export_type}/?task_id={task.id}") data = json.loads(resp.data) if export_type == "json" else yaml.load( resp.data) data0 = data.copy() del data0["id"] file_name = f"resources_reimport.{export_type}" resp = client.post( "/load/task/RESOURCE", data={ "file_": ( BytesIO((json.dumps(data0) if export_type == "json" else yaml.dump(data0)).encode()), file_name, ) }, follow_redirects=True, ) assert resp.status_code == 200 assert b"SYN-18-UOA-333" in resp.data assert b"SYN-18-UOA-222" in resp.data t = Task.get(filename=file_name) assert t.records.count() == 2 assert t.is_raw # with the the existing ID resp = client.post( "/load/task/RESOURCE", data={ "file_": ( BytesIO((json.dumps(data) if export_type == "json" else yaml.dump(data)).encode()), file_name, ) }, follow_redirects=True, ) assert resp.status_code == 200 assert b"SYN-18-UOA-333" in resp.data assert b"SYN-18-UOA-222" in resp.data t = Task.get(filename=file_name) assert t.records.count() == 2 assert t.is_raw