Итак, я работаю над движком 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})