text: import json
  import random
  import re
  import string
  
  from urllib.parse import parse_qs, urlparse
  
  
  def region_from_managedblckchain_url(url):
      domain = urlparse(url).netloc
      region = "us-east-1"
      if "." in domain:
          region = domain.split(".")[1]
      return region
  
  
  def networkid_from_managedblockchain_url(full_url):
      id_search = re.search(r"\/n-[A-Z0-9]{26}", full_url, re.IGNORECASE)
      return_id = None
      if id_search:
          return_id = id_search.group(0).replace("/", "")
      return return_id
  
  
  def get_network_id():
      return "n-" + "".join(
          random.choice(string.ascii_uppercase + string.digits) for _ in range(26)
      )
  
  
  def memberid_from_managedblockchain_request(full_url, body):
      id_search = re.search(r"\/m-[A-Z0-9]{26}", full_url, re.IGNORECASE)
      return_id = None
      if id_search:
          return_id = id_search.group(0).replace("/", "")
      else:
          # >= botocore 1.19.41 can add the memberId as a query parameter, or in the body
          parsed_url = urlparse(full_url)
          qs = parse_qs(parsed_url.query)
          if "memberId" in qs:
              return_id = qs.get("memberId")[0]
          elif body:
              body = json.loads(body)
              return_id = body["MemberId"]
      return return_id
  
  
  def get_member_id():
      return "m-" + "".join(
          random.choice(string.ascii_uppercase + string.digits) for _ in range(26)
      )
  
  
  def proposalid_from_managedblockchain_url(full_url):
      id_search = re.search(r"\/p-[A-Z0-9]{26}", full_url, re.IGNORECASE)
      return_id = None
      if id_search:
          return_id = id_search.group(0).replace("/", "")
      return return_id
  
  
  def get_proposal_id():
      return "p-" + "".join(
          random.choice(string.ascii_uppercase + string.digits) for _ in range(26)
      )
  
  
  def invitationid_from_managedblockchain_url(full_url):
      id_search = re.search(r"\/in-[A-Z0-9]{26}", full_url, re.IGNORECASE)
      return_id = None
      if id_search:
          return_id = id_search.group(0).replace("/", "")
      return return_id
  
  
  def get_invitation_id():
      return "in-" + "".join(
          random.choice(string.ascii_uppercase + string.digits) for _ in range(26)
      )
  
  
  def member_name_exist_in_network(members, networkid, membername):
      membernamexists = False
      for member_id in members:
          if members.get(member_id).network_id == networkid:
              if members.get(member_id).name == membername:
                  membernamexists = True
                  break
      return membernamexists
  
  
  def number_of_members_in_network(members, networkid, member_status=None):
      return len(
          [
              membid
              for membid in members
              if members.get(membid).network_id == networkid
              and (
                  member_status is None
                  or members.get(membid).member_status == member_status
              )
          ]
      )
  
  
  def admin_password_ok(password):
      if not re.search("[a-z]", password):
          return False
      elif not re.search("[A-Z]", password):
          return False
      elif not re.search("[0-9]", password):
          return False
      elif re.search("['\"@\\/]", password):
          return False
      else:
          return True
  
  
  def nodeid_from_managedblockchain_url(full_url):
      id_search = re.search(r"\/nd-[A-Z0-9]{26}", full_url, re.IGNORECASE)
      return_id = None
      if id_search:
          return_id = id_search.group(0).replace("/", "")
      return return_id
  
  
  def get_node_id():
      return "nd-" + "".join(
          random.choice(string.ascii_uppercase + string.digits) for _ in range(26)
      )
  
  
  def number_of_nodes_in_member(nodes, memberid, node_status=None):
      return len(
          [
              nodid
              for nodid in nodes
              if nodes.get(nodid).member_id == memberid
              and (node_status is None or nodes.get(nodid).node_status == node_status)
          ]
      )
  
  
  def nodes_in_member(nodes, memberid):
      return [nodid for nodid in nodes if nodes.get(nodid).member_id == memberid]
  