нужна помощь в разделении функции Django на 2 отдельные части - PullRequest
0 голосов
/ 17 марта 2020

Я продолжаю делать успехи на персональном веб-сайте данных о велосипеде. В настоящее время я работаю над попыткой взять функцию, которая в данный момент запускается сразу, и превратить ее в две отдельные части. Я извлекаю данные из Strava через их API, и я надеюсь сначала сделать это, нажав кнопку, вытащить и отобразить список последних поездок (эта часть выполнена), а затем, как только этот список отобразится, выбрать отдельную поездку для Импортировать. На данный момент это всего лишь сценарий «все или ничего», где я могу извлечь все файлы езды одновременно, но я хотел сделать это более «по требованию»

Так что я надеюсь сделать это получить часть, которая собирает потоки и превращает их в свою собственную функцию, которая может получать данные из этой первой функции рендеринга и вызывать отдельный поток проезда для добавления в модель / файл / что угодно. Просто любопытно посмотреть, есть ли у кого-нибудь понимание того, что исследовать

def stravadownload(request):
    adict={}
    actdict={}
    activitydict={}
    if "downstrav" in request.POST:

        client = Client()
        activity=Activity()

        with open("stravtoken.json", "r") as stravtoken:
            tokendict = json.load(stravtoken)

        access_token = tokendict["access_token"]
        refresh_token = tokendict["refresh_token"]
        expires_at = tokendict['expires_at']

        client.access_token=access_token
        client.refresh_access_token= refresh_token
        client.token_expires_at = expires_at

        athlete = client.get_athlete()
        actID=[]
        dates=[]
        activityname=[]
        awatts=[]
        actdur=[]

        for activity in client.get_activities(after="2020-03-01T00:00:00Z"):
            activityID = "{0.id}".format(activity)
            ridedate = str(activity.start_date)
            ridename=activity.name
            actwatts=activity.average_watts
            adur=activity.elapsed_time
            actdict={activityID: ridedate}
            actID.append(activityID)
            dates.append(ridedate)
            activityname.append(ridename)
            awatts.append(actwatts)
            actdur.append(adur)
            actIDdf=pd.DataFrame(actID, columns=["actIDs"])
            actIDdf['dates']= dates
            actIDdf['name']=activityname
            actIDdf['actwatts']=awatts
            actIDdf['actdur']=actdur

        #This is the step I want to have "on demand" where I'd get the individual ride streams when I select a ride.

            types = ['watts',  'heartrate']
            streams = client.get_activity_streams(activityID, types=types)

            if 'watts' or 'heartrate' in streams.keys():

                df = pd.DataFrame.from_dict(streams['watts'].data)
                df.index.name='time'
                df.columns=['watts']

                for heartrate in streams.keys():
                    try:
                        moddf= pd.DataFrame.from_dict(streams['heartrate'].data)
                    except KeyError:
                        pass
                moddf.index.name='time'
                moddf.columns=['heartrate']

                new_df=pd.merge(df,moddf, how='outer', on=['time'])

                new_df['activityID']=activityID
                new_df['dates']=ridedate

                new_df['time']=new_df.index

                activitydict=new_df.to_dict()
#this exports each activityID ride to its own json file
            filePathNameWExt = 'activityout' + activityID + '.json'
            with open(filePathNameWExt, "w+") as json_file:
                json.dump(activitydict, json_file)
                Export = df.to_json(json_file) 



#the following puts the ride list into context and then renders it in my template
        actIDdf['dates'] = pd.to_datetime(actIDdf['dates'])
        actIDdf['actdur'] = pd.to_datetime(actIDdf['actdur'])
        adict=actIDdf.to_dict('records')
    context= {

        'adict': adict,
        'activitydict': activitydict
    }
    return render(request, 'PMC/stravadownload.html', context)

...