Как перенести переменную из python файла в python flask - PullRequest
0 голосов
/ 03 августа 2020

Я хочу перенести label_count и card_m в свой основной flask python файл. Как я могу это сделать? Я уже пробовал импортировать, не получилось. И если есть какое-то решение для card_m, я не хочу повторять запрос столько раз

import requests
import json
from itertools import chain 
from collections import Counter
  
url = "https://api.trello.com/1/boards/OIeEN1vG/cards"
query = {
    'key': 'e8cac9f95a86819d54194324e95d4db8',
    'token': 'aee28b52f9f8486297d8656c82a467bb4991a1099e23db539604ac35954d5633'
    }

response = requests.request(
    "GET",
    url,
    params=query
    )
data = response.json()
card_labels_string = list(chain.from_iterable([d['labels']for d in data]))
card_labels = [c ["color"] for c in card_labels_string]
label_count = dict((i, card_labels.count(i)) for i in card_labels)

cards = dict(zip([d['name']for d in data],[d['shortLink']for d in data]))
card_m = {}
for key,value in cards.items():
    url_card = "https://api.trello.com/1/cards/{}/members".format(value)
    res = requests.request(
        "GET",
        url_card,
        params=query
        )
    names = [f['fullName']for f in res.json()]
    card_m.update({key : names})

print(label_count, card_m)


    

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Хорошо, основываясь на ваших комментариях, я думаю, что могу вам помочь. Итак, две вещи, которые вы должны сделать, чтобы сделать это как можно более чистым и избежать ошибок в дальнейшем.

Прямо сейчас ваш код находится в глобальной области. Вам следует избегать делать это по цене, если буквально нет другого выхода. Итак, первое, что вам нужно сделать, это создать класс stati c для хранения этих данных. Может быть, что-то вроде этого.

class LabelHelper(object):
    card_m = {}
    label_count = None

    @classmethod
    def startup(cls):
        url = "https://api.trello.com/1/boards/OIeEN1vG/cards"
        query = {
            'key': 'e8cac9f95a86819d54194324e95d4db8',
            'token': 'aee28b52f9f8486297d8656c82a467bb4991a1099e23db539604ac35954d5633'
        }

        response = requests.request(
            "GET",
            url,
            params=query
        )
        data = response.json()
        card_labels_string = list(chain.from_iterable([d['labels'] for d in data]))
        card_labels = [c["color"] for c in card_labels_string]
        cls.label_count = dict((i, card_labels.count(i)) for i in card_labels)

        cards = dict(zip([d['name'] for d in data], [d['shortLink'] for d in data]))
        for key, value in cards.items():
            url_card = "https://api.trello.com/1/cards/{}/members".format(value)
            res = requests.request(
                "GET",
                url_card,
                params=query
            )
            names = [f['fullName'] for f in res.json()]
            cls.card_m.update({key: names})
            
    @classmethod
    def get_data(cls):
        return cls.label_count, cls.card_m

Теперь нам нужно запустить этот метод startup в этом классе, прежде чем запускать flask через app.run. Это может выглядеть примерно так ...

if __name__ == '__main__':
    LabelHelper.startup()
    app.run("your interface", your_port)

Теперь мы заполнили эти статические c переменные данными. Теперь вам просто нужно импортировать этот класс stati c в любой файл, который вы хотите, и просто позвонить get_data, и вы получите то, что хотите. Итак, вот так ...

from labelhelper import LabelHelper

def some_function():
    label_count, card_m = LabelHelper.get_data()

FYI в from import labelhelper в нижнем регистре, если в общем случае вы назвали бы файл, содержащий этот класс, labelhelper.py

0 голосов
/ 03 августа 2020

Что значит «перевод»? Если вы хотите использовать их в другой функции, сделайте следующее:

from main_python import other_function

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