docs: def from_private_key(account_name, private_key=None, private_key_path=None,
                       storage=None, storage_path=None, api_version="v3",
                       readonly=False, http_client=None, ga_hook=None):
      """Create a client for a service account.
  
      Create a client with an account name and a private key.
  
       Args:
        account_name: str, the account identifier (probably the account email).
        private_key: str, the private key as a string.
        private_key_path: str, path to a file with the private key in.
        storage: oauth2client.client.Storage, a Storage implementation to store
                 credentials.
        storage_path: str, path to a file storage.
        readonly: bool, default False, if True only readonly access is requested
                  from GA.
        http_client: httplib2.Http, Override the default http client used.
        ga_hook: function, a hook that is called every time a query is made
                 against GA.
      """
      if not private_key:
          if not private_key_path:
              raise GapyError(
                  "Must provide either a private_key or a private_key_file")
          if isinstance(private_key_path, basestring):
              private_key_path = open(private_key_path)
          private_key = private_key_path.read()
  
      storage = _get_storage(storage, storage_path)
  
      scope = GOOGLE_API_SCOPE_READONLY if readonly else GOOGLE_API_SCOPE
      credentials = SignedJwtAssertionCredentials(account_name, private_key,
                                                  scope)
      credentials.set_store(storage)
  
      return Client(_build(credentials, api_version, http_client), ga_hook)