nitin_cherian
nitin_cherian

Reputation: 6675

Saving and Retrieving Python object Attributes values to a file

I require 2 things to be done.

First, take the request object and save the object attribute values to a file as values of some known keys. This file needs to be editable after saving, ie, a user can modify the values of the keys(So I used json format). This is handled in function save_auth_params_to_file().

Second, get the file contents in a such a format that I can retrieve the values using the keys. This is handled in function get_auth_params_from_file.

import json
import os

SUCCESS_AUTH_PARAM_FILE = '/auth/success_auth_params.json'


def save_auth_params_to_file(request):

    auth_params = {}
    if request is not None:
        auth_params['token'] = request.token
        auth_params['auth_url'] = request.auth_url
        auth_params['server_cert'] = request.server_cert
        auth_params['local_key'] = request.local_key
        auth_params['local_cert'] = request.local_cert
        auth_params['timeout'] = request.timeout_secs

    with open(SUCCESS_AUTH_PARAM_FILE, 'w') as fout:
        json.dump(auth_params, fout, indent=4)


def get_auth_params_from_file():
    auth_params = {}
    if os.path.exists(SUCCESS_AUTH_PARAM_FILE):
        with open(SUCCESS_AUTH_PARAM_FILE, "r") as fin:
            auth_params = json.load(fin)

    return auth_params

Question:

  1. Is there a more pythonic way to achieve the 2 things ?

  2. Any potential issues in the code which I have overlooked?

  3. Any error conditions I have to take care ?

Upvotes: 1

Views: 362

Answers (1)

lucasnadalutti
lucasnadalutti

Reputation: 5948

There are some things to be noted, yes:

i) When your request is None for some reason, you are saving an empty JSON object to your file. Maybe you'll want to write to your file only if request is not None?

auth_params = {}
if request is not None:
    auth_params['token'] = request.token
    auth_params['auth_url'] = request.auth_url
    auth_params['server_cert'] = request.server_cert
    auth_params['local_key'] = request.local_key
    auth_params['local_cert'] = request.local_cert
    auth_params['timeout'] = request.timeout_secs

    with open(SUCCESS_AUTH_PARAM_FILE, 'w') as fout:
        json.dump(auth_params, fout, indent=4)

ii) Why not create the dict all at once?

    auth_params = {
        'token': request.token,
        'auth_url': request.auth_url,
        'server_cert': request.server_cert,
        'local_key': request.local_key,
        'local_cert': request.local_cert,
        'timeout': request.timeout,
    }

iii) Make sure this file is in a SAFE location with SAFE permissions. This is sensitive data, like anything related to authentication.

iv) You are overwriting your file everytime save_auth_params_to_file is called. Maybe you mean to append your JSON to the file instead of overwriting? If that's the case:

with open(SUCCESS_AUTH_PARAM_FILE, 'a') as fout:

Upvotes: 3

Related Questions