code: def upload(self, project_id, parent_kind, parent_id):
          
          path_data = self.local_file.get_path_data()
          hash_data = path_data.get_hash()
          self.upload_id = self.upload_operations.create_upload(project_id, path_data, hash_data,
                                                                storage_provider_id=self.config.storage_provider_id)
          ParallelChunkProcessor(self).run()
          parent_data = ParentData(parent_kind, parent_id)
          remote_file_data = self.upload_operations.finish_upload(self.upload_id, hash_data, parent_data,
                                                                  self.local_file.remote_id)
          if self.file_upload_post_processor:
              self.file_upload_post_processor.run(self.data_service, remote_file_data)
          return remote_file_data['id']
docs: Upload file contents to project within a specified parent.
          :param project_id: str project uuid
          :param parent_kind: str type of parent ('dds-project' or 'dds-folder')
          :param parent_id: str uuid of parent
          :return: str uuid of the newly uploaded file