KeyError при импорте файла config.ini в папку Management Command и запуске файла manage.py (Django)

У меня следующая структура.

members
├── management
│   │── __init__.py
│   │── commands
│       │── active.py
        │── whatsapp.py
        │── config.ini

Я пытаюсь запустить whatsapp api, и все мои данные аутентификации хранятся в файле config.ini. Однако, когда я запускаю python manage.py active, я получаю следующее сообщение об ошибке.

C:\Users\timmeh\source\Python Projects\Django Projects\env\myproject\topxgym>python manage.py active
Traceback (most recent call last):
  File "C:\Users\timmeh\source\Python Projects\Django Projects\env\myproject\topxgym\manage.py", line 22, in <module>
    main()
  File "C:\Users\timmeh\source\Python Projects\Django Projects\env\myproject\topxgym\manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\timmeh\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\management\__init__.py", line 446, in execute_from_command_line   
    utility.execute()
  File "C:\Users\timmeh\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\management\__init__.py", line 440, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\timmeh\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\management\base.py", line 402, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\timmeh\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\management\base.py", line 448, in execute
    output = self.handle(*args, **options)
  File "C:\Users\timmeh\source\Python Projects\Django Projects\env\myproject\topxgym\members\management\commands\active.py", line 20, in handle
    msg = WhatsApp(name, phone, date)
  File "C:\Users\timmeh\source\Python Projects\Django Projects\env\myproject\topxgym\members\management\commands\whatsapp.py", line 14, in __init__
    self.authorization = self.config['Auth']['Authorization']
  File "C:\Users\timmeh\AppData\Local\Programs\Python\Python310\lib\configparser.py", line 964, in __getitem__
    raise KeyError(key)
KeyError: 'Auth'

Код работает нормально, если я перемещаю его в отдельную папку и запускаю файл whatsapp.py напрямую.

файл active.py

from turtle import update
from django.core.management.base import BaseCommand, CommandError
from members.models import ActiveMember
from datetime import datetime, timedelta
from .whatsapp import WhatsApp


class Command(BaseCommand):
    help = 'Deactivate expired memberships!'

    def handle(self, *args, **options):
        ActiveMember.objects.filter(end_date__lt=datetime.now().date()).update(status='2')
        expired_memberships = ActiveMember.objects.filter(end_date=datetime.now().date())
        
        for expired in expired_memberships:
            name = expired.member.full_name
            phone = expired.member.phone
            date = expired.end_date
            
            msg = WhatsApp(name, phone, date)
            msg.send_message()

файлwhatsapp.py

import requests
from configparser import ConfigParser
from datetime import datetime


class WhatsApp():
    def __init__(self, name, phone, date):
        self.required_len = len(name) + 2
        self.config = ConfigParser()
        self.config.read('config.ini')
        self.name = name.center(self.required_len)
        self.phone = add_suffix(self, phone)
        self.date = date
        self.authorization = self.config['Auth']['Authorization']
        self.token = self.config['Auth']['Token']
        self.phone_number_id = self.config['Auth']['phone_number_id']
        self.whatsapp_business_account_id = self.config['Auth']['whatsapp_business_account_id']

        
    def send_message(self):
        
        headers = {
            self.authorization: self.token,
        }

        json_data = {
            "messaging_product": "whatsapp",
            "recipient_type": "individual",
            "to": self.phone,
            "type": "template",
            "template": {
                "name": "customer_expire",
                "language": {
                    "code": "en-us",
                },
                "components": [
                    {
                        "type": "body",
                        "parameters": [
                            {
                                "type": "text",
                                "text": self.name,
                            },
                            {
                                "type": "date_time",
                                "date_time": {
                                    "fallback_value": str(self.date)
                                }
                            }
                        ]
                    }
                ]
            }
        }

        response = requests.post(f'https://graph.facebook.com/v14.0/{self.phone_number_id}/messages', headers=headers, json=json_data)
        print('response = ', response)
        print('response.status_code = ', response.status_code)
        print('response.text = ', response.text)
        
        
def add_suffix(self, number):
    number = number.lstrip('0')
    if number[0] == '2':
        return '64' + number
    elif number[0] == '6' and number[1] == '4':
        return number
    else: return None

Для всех, у кого есть аналогичная проблема с Management Command. Я поместил свой config.ini в основной каталог, где находится мой файл manage.py, и это решило проблему.

Вернуться на верх