code: def create_upload_and_chunk_url(self, project_id, path_data, hash_data, remote_filename=None,
                                      storage_provider_id=None):
          
          upload_response = self._create_upload(project_id, path_data, hash_data, remote_filename=remote_filename,
                                                storage_provider_id=storage_provider_id, chunked=False)
          return upload_response['id'], upload_response['signed_url']
docs: Create an non-chunked upload that returns upload id and upload url. This type of upload doesn't allow
          additional upload urls. For single chunk files this method is more efficient than
          create_upload/create_file_chunk_url.
          :param project_id: str: uuid of the project
          :param path_data: PathData: holds file system data about the file we are uploading
          :param hash_data: HashData: contains hash alg and value for the file we are uploading
          :param remote_filename: str: name to use for our remote file (defaults to path_data basename otherwise)
          :param storage_provider_id:str: optional storage provider id
          :return: str, dict: uuid for the upload, upload chunk url dict