Почему фляга бросает ошибку атрибута класса - PullRequest
0 голосов
/ 28 сентября 2019

Мое приложение-колба сообщает мне, что метод класса, который я создал, не определен.Он говорит:

AttributeError: у объекта 'GetIndexItemInfo' нет атрибута 'genDFs'

Вот код:

__ init __. Py

    @app.route('/assistant', methods=['GET', 'POST'])
    @login_required
    def use_assistant():
        from flask import request

        if request.method == 'GET':
            ...FORM GOES HERE

        else:
            report = request.form.get('report')
            from modules.majestic import config
            rprt = config[report]
            inst=rprt(request.form)
            url = inst.genUrl()
            dic = inst.getData(url)

            df = inst.genDFs(dic)            
            ...

majestic.py

import urllib.request, urllib.parse, urllib.error 
import ast
import pandas as pd
import ssl

ctx = ssl.create_default_context() 
ctx.check_hostname = False  
ctx.verify_mode = ssl.CERT_NONE 

class Majestic:
    key='APIKEYHERE'
    base='https://api.majestic.com/api/json?app_api_key={}'.format(key)

    @staticmethod    
    def getData(url):
        req = urllib.request.Request(url=url)
        f = urllib.request.urlopen(req, context=ctx)        
        x = f.read().decode('utf-8')
        dic = ast.literal_eval(x)
        return dic

class Report(Majestic):
    def __init__(self,data):

        items=[]
        for key,val in data.items():
            if 'address' in key:
                items.append(val)
        self.items = items
        self.len = len(items)
        self.cmd = data['cmd']        
        self.base_url = super().base

    def genUrl(self):
        substr=self.base_url+'&cmd='+self.cmd+'&items='+str(len(self.items))+'&'
        for i,item in enumerate(self.items):
            substr=substr+'item'+str(i)+'='+item+'&'

        return substr[:-1]


class GetIndexItemInfo(Report):

    @staticmethod
    def genDfs(data):
        for i in range(len(data['DataTables']['Results']['Data'])):
            new_data=data['DataTables']['Results']['Data'][i]
            cols = ['Url','AC Rank','Citation Flow','Trust Flow','Ext. Back Links','Ref Domains','Ref Follow Domains']
            maj_cols = ['Item','ACRank','CitationFlow','TrustFlow','ExtBackLinks','RefDomains','RefDomainTypeFollow']
            dic = dict(zip(cols,[new_data[i] for i in maj_cols]))
            cols = ['Url','AC Rank','Citation Flow','Trust Flow','Ext. Back Links','Ref Domains','Ref Follow Domains']
            if i == 0:
                main_df = pd.DataFrame(dic,index=[0])[cols]
            else:
                df = pd.DataFrame(dic,index=[0])[cols]
                main_df = main_df.append(df, ignore_index=True)
        return main_df

Я протестировал majestic.py отдельно, а экземпляр класса GetIndexItemInfo, который я создаю, работает должным образом и не возвращает ошибку.

Есть идеи, почему я могу получить эту ошибку, когда запускаю ее в колбе?

Заранее большое спасибо

1 Ответ

3 голосов
/ 28 сентября 2019

Это правильно.
AttributeError: у объекта 'GetIndexItemInfo' нет атрибута 'genDFs'

Ваш метод называется genDfs Обратите внимание на заглавные буквы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...