apache / apache/libcloud

Object metadata keys are lowercased when uploading to GCS

Open
#1,530 6 comments 0 reactions 0 assignees View on GitHub
api: storage drivers: google storage feature request stale
Dominant language
Python
Stars
2.1k
Forks
931
Avg merge
1d 2h
Merged PRs (30d)
4

Description

## Summary

Mixed-case metadata is lowercased when using libcloud to upload objects to Google Cloud Storage.

## Detailed Information

I'm using libcloud to upload files to a Google Cloud Storage bucket together with object metadata.
In the process, the keys in my metadata dict are being lowercased. This is not due to Google Cloud Storage, which does support mixed case metadata.

The issue can be reproduced following the example from the docs:
```
from libcloud.storage.types import Provider
from libcloud.storage.providers import get_driver

cls = get_driver(Provider.GOOGLE_STORAGE)
driver = cls('SA-EMAIL', './SA.json') # provide service account credentials here

FILE_PATH = '/home/user/file'

extra = {'meta_data': {'camelCase': 'foo'}}

# Upload with metadata
with open(FILE_PATH, 'rb') as iterator:
obj = driver.upload_object_via_stream(iterator=iterator,
container=container,
object_name='file',
extra=extra)
```
The file uploads succesfully, but resulting metadata will look as follows:
![image](https://user-images.githubusercontent.com/25384180/102534327-dd828780-40a6-11eb-999a-ae3d775c3786.png)

Where `camelCase` has been turned into `camelcase`.

I'm using apache-libcloud==3.0.0 with Python 3.8 on Linux (the python:3.8 Docker image).

Contributor guide

Open the contributing guide

Research direction

Start at the upload_object_via_stream entry point and trace how the extra metadata dict is prepared for Google Cloud Storage. Reproduce the example with the camelCase key, then verify that the uploaded object's metadata preserves its original casing.

Written by the indexing model from the issue text.

Assessment

Tech stack
google-cloud, python
Domain
cloud
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.