code: def create_upload(self, project_id, filename, content_type, size,
                        hash_value, hash_alg, storage_provider_id=None, chunked=True):
          
          data = {
              "name": filename,
              "content_type": content_type,
              "size": size,
              "hash": {
                  "value": hash_value,
                  "algorithm": hash_alg
              },
              "chunked": chunked,
          }
          if storage_provider_id:
              data['storage_provider'] = {'id': storage_provider_id}
          return self._post("/projects/" + project_id + "/uploads", data)
docs: Post to /projects/{project_id}/uploads to create a uuid for uploading chunks.
          NOTE: The optional hash_value and hash_alg parameters are being removed from the DukeDS API.
          :param project_id: str uuid of the project we are uploading data for.
          :param filename: str name of the file we want to upload
          :param content_type: str mime type of the file
          :param size: int size of the file in bytes
          :param hash_value: str hash value of the entire file
          :param hash_alg: str algorithm used to create hash_value
          :param storage_provider_id: str optional storage provider id
          :param chunked: is the uploaded file made up of multiple chunks. When False a single upload url is returned.
              For more see https://github.com/Duke-Translational-Bioinformatics/duke-data-service/blob/develop/api_design/DDS-1182-nonchucked_upload_api_design.md
          :return: requests.Response containing the successful result