code: def register(self):
      while True:
          desc = input("Enter the name of the dataset to register: ")
          dataset = desc.lower().strip()
          provider_info = (
              self.mkt_contract.functions.getDataProviderInfo(
                  Web3.toHex(dataset.encode())
              ).call()
          )
  
          if provider_info[4]:
              print(
                  "There is already a dataset registered under "
                  'the name "{}". Please choose a different '
                  "name.".format(dataset)
              )
          else:
              break
  
      price = int(
          input(
              "Enter the price for a monthly subscription to "
              "this dataset in ENG: "
          )
      )
      while True:
          freq = input(
              "Enter the data frequency [daily, hourly, minute]: "
          )
          if freq.lower() not in ("daily", "hourly", "minute"):
              print("Not a valid frequency.")
          else:
              break
  
      while True:
          reg_pub = (
              input("Does it include historical data? [default: Y]: ")
              or "y"
          )
          if reg_pub.lower() not in ("y", "n"):
              print("Please answer Y or N.")
          else:
              if reg_pub.lower() == "y":
                  has_history = True
              else:
                  has_history = False
              break
  
      while True:
          reg_pub = (
              input("Doest it include live data? [default: Y]: ") or "y"
          )
          if reg_pub.lower() not in ("y", "n"):
              print("Please answer Y or N.")
          else:
              if reg_pub.lower() == "y":
                  has_live = True
              else:
                  has_live = False
              break
  
      address, address_i = self.choose_pubaddr()
      if "key" in self.addresses[address_i]:
          key = self.addresses[address_i]["key"]
          secret = self.addresses[address_i]["secret"]
      else:
          key, secret = get_key_secret(
              address, self.addresses[address_i]["wallet"]
          )
  
      grains = to_grains(price)
  
      tx = self.mkt_contract.functions.register(
          Web3.toHex(dataset.encode()),
          grains,
          address,
      ).buildTransaction(
          {
              "from": address,
              "nonce": self.web3.eth.getTransactionCount(address),
          }
      )
  
      signed_tx = self.sign_transaction(tx)
  
      try:
          tx_hash = "0x{}".format(
              bin_hex(self.web3.eth.sendRawTransaction(signed_tx))
          )
          print(
              "\nThis is the TxHash for this transaction: {}".format(
                  tx_hash
              )
          )
  
      except Exception as e:
          print(
              "Unable to register the requested dataset: {}".format(e)
          )
          return
  
      self.check_transaction(tx_hash)
  
      print("Waiting for the transaction to succeed...")
  
      while True:
          try:
              if self.web3.eth.getTransactionReceipt(tx_hash).status:
                  break
              else:
                  print("\nTransaction failed. Aborting...")
                  return
          except AttributeError:
              pass
          for i in range(0, 10):
              print(".", end="", flush=True)
              time.sleep(1)
  
      print("\nWarming up the {} dataset".format(dataset))
      self.create_metadata(
          key=key,
          secret=secret,
          ds_name=dataset,
          data_frequency=freq,
          desc=desc,
          has_history=has_history,
          has_live=has_live,
      )
      print("\n{} registered successfully".format(dataset))
  
imports: from __future__ import print_function
  import glob
  import json
  import os
  import re
  import shutil
  import sys
  import time
  import webbrowser
  import bcolz
  import logbook
  import pandas
  import requests
  from requests_toolbelt import MultipartDecoder
  from requests_toolbelt.multipart.decoder import NonMultipartContentTypeException
  from catalyst.constants import LOG_LEVEL, AUTH_SERVER, ETH_REMOTE_NODE, MARKETPLACE_CONTRACT, MARKETPLACE_CONTRACT_ABI, ENIGMA_CONTRACT, ENIGMA_CONTRACT_ABI, TERMS_AND_CONDITIONS
  from catalyst.exchange.utils.stats_utils import set_print_settings
  from catalyst.marketplace.marketplace_errors import MarketplaceDatasetNotFound, MarketplaceNoAddressMatch, MarketplaceHTTPRequest, MarketplaceNoCSVFiles, MarketplaceRequiresPython3
  from catalyst.marketplace.utils.auth_utils import get_key_secret, get_signed_headers
  from catalyst.marketplace.utils.eth_utils import bin_hex, from_grains, to_grains
  from catalyst.marketplace.utils.path_utils import get_bundle_folder, get_data_source_folder, get_marketplace_folder, get_user_pubaddr, get_temp_bundles_folder, extract_bundle, save_user_pubaddr
  from catalyst.utils.paths import ensure_directory
label_desc: Use image node_id 14 for calling the Marketplace obj's underlying member method code with example usage: obj.register() without return types