Как я могу преобразовать эту функцию запроса JSON в объектно-ориентированный? - PullRequest
0 голосов
/ 10 июля 2019

Итак, я работаю над движком ETL, таким как приложение в Django, и я создал view, который очень неэффективен в том смысле, что он не следует принципам СУХОГО и действительно ужасен.Могу ли я получить некоторую помощь в рефакторинге этого, чтобы сделать его более ориентированным на объект в моде?

Вот ссылка на полный код: https://pastebin.com/At45Agcm

Я следую здесь: Python превращает гигантскую функцию в класс

, но я все еще не уверен, как создать экземпляр класса, в котором (как вы можете видеть из кода pastebin) у вас есть динамическое количество переменных для представления отдельного JSONобъекты, которые я хочу извлечь.

Вот пример метода, который я хочу преобразовать в более похожий на ООП.Действительно трудно понять это, так как количество параметров, которые я извлекаю, является переменной величиной.Огромное спасибо за помощь!

def repositories(request):
    '''
   Method that dynamically gets
   team members from a team
   given a team ID.

   Args:
       request: HTTP request payload

   Returns:
       POST string
   '''

    parsed_list = []
    parsed_data = []

    if request.method == 'POST':


        # EXTRACTION PHASE
        repo_endpoint = request.POST.get('org_name')

        link = 'MY_GITHUB_URL'

        headers = {'Authorization': 'token MY_TOKEN_NUMERICAL'}

        response = requests.get(link + repo_endpoint, headers=headers)

        extraction_filename = datetime.now().strftime('repos_extraction_%Y-%m-%d-%H-%M-%S.json')
        transformed_file = datetime.now().strftime('repos_transformed_%Y-%m-%d-%H-%M-%S.json')

        with open(extraction_filename, 'w', encoding='utf-8') as fd:
            fd.write(response.text)

        # TRANSFORMATION PHASE
        with open(extraction_filename, encoding='utf-8') as datafile:
            data = json.load(datafile)

        json_tree = objectpath.Tree(data)
        uid = tuple(json_tree.execute('$..id'))[::2]
        repo_name = tuple(json_tree.execute('$..name'))
        creation_date = tuple(json_tree.execute('$..created_at'))
        last_updated = tuple(json_tree.execute('$..updated_at'))
        qty_watchers = tuple(json_tree.execute('$..watchers'))
        qty_forks = tuple(json_tree.execute('$..forks'))
        qty_issues = tuple(json_tree.execute('$..open_issues'))
        main_language = tuple(json_tree.execute('$..language'))
        repo_size = tuple(json_tree.execute('$..size'))

        parsed_list = list(zip(uid, repo_name, creation_date, last_updated, qty_watchers, qty_forks, qty_issues, main_language, repo_size))

        # LOADING PHASE
        objs = []

        for ri, rn, cd, lu, qw, qf, qi, ml, rs in zip(uid, repo_name, creation_date, \
                                                        last_updated, qty_watchers, qty_forks, \
                                                        qty_issues, main_language, repo_size):

            objs.append(Repository(ri, rn, cd, lu, qw, qf, qi, ml, rs))

        Repository.objects.bulk_create(objs)


        # write transformed data into a json file in memory
        for tup in parsed_list:

            parsed_data.append(dict(uid=tup[0], repo_name=tup[1], creation_date=tup[2], last_updated=tup[3], qty_watchers=tup[4], qty_forks=tup[5], qty_issues=tup[6], main_language=tup[7], repo_size=tup[8]))

        with open(transformed_file, 'w', encoding='utf-8') as tf:
            tf.write(str(parsed_data))

    return render(request, 'app/repositories.html', {'data': parsed_data})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...