configparser
============
Python’s build-in module ``configparser`` provides a handy way to manage API keys that you always want to keep out of any public code in GitHub repos, gists, etc.
This chapter shows a quick, easy way for beginners to use a ``.cfg`` file to keep secret keys and tokens in one place.
Set up your config file
-----------------------
Let’s say all your Python work and project folders are inside a folder named ``python`` on your computer. We are looking at files you run locally, not on a server.
1. To make your config file easy to access, but not likely to be deleted (by you) by accident, **create** a new folder in that top-level folder — which I will assume is named ``python`` — on your computer.
2. Name the new folder ``config``.
3. Inside the ``config`` folder, **create** a new file named ``keys_config.cfg``. This is a plain-text file. You can create it in Atom or any code editor.
4. Write at least one key — or set of keys and tokens — into the file in the exact pattern shown below. Then save the file. ::
[openweather]
api_key = mt732wbt5kh5ea4bkw7qytbb9gdkaew4
[twitter]
consumer_key = d53Qe4uf5LMWuQeQFFG66n6BN
consumer_secret = Yxf5n2BwnRELRrkkVjWgpTu48sz5KwGD52324PuwkFWdmVGP4m
access_token = 9922431-d53Qe4uf5LMWuQeQFFG66n6BN
access_token_secret = ubfWMR8WYucrzeaQdrqkm6SrhYTMVQSsxZWpNbtUCMX5u
[google]
api_key = ubfWMR8WYucrzeaQdrqkm6SrhYTMVQSsxZWpNbtUCMX5u
These are not real keys. Do not try to use them.
* Note, there are no quotation marks in the file.
* The name of the vendor or source is in brackets.
* Use linespaces between items exactly as shown.
Accessing the config file
-------------------------
Your config file can contain keys and tokens for many different APIs. When you are writing a Python script to access a particular API, you will want to get the keys only for that *one* API.
For an example, let’s say you’re accessing the `OpenWeather `_ API in a new Python script. Your script is in a folder named ``weather``, and that folder is inside the ``python`` folder referred to above. In that case, the code in your script is: ::
from configparser import ConfigParser
config = ConfigParser()
config.read('../config/keys_config.cfg')
API_KEY = config.get('openweather', 'api_key')
Note, you will need to ensure that the **path** on the third line above matches your system. The image below shows the relationship represented in the code above.
You will use ``config.get()`` separately for each key or token.
.. figure:: _static/images/config_file.png
:scale: 50 %
:alt: Example of local file structure screenshot
More info
---------
`Read more about configparser `_ in the Python docs.
You might find it necessary to use Python’s ``pathlib`` module for writing relative paths. `Learn more here. `_
`See an example of the code in a short Flask script. `_
.