J'ai essayé d'utiliser l'API UnityCloudBuild de Python

J'ai essayé d'utiliser l'API de Unity Cloud Build de Python. Je pense qu'il peut être utilisé lors du téléchargement de fichiers construits en coopération avec d'autres systèmes.

J'ai essayé d'utiliser Unity Cloud Build

Le fait qu'il puisse être construit à partir du code source de BitBucket (anciennement: Stash) était également élevé. Le réglage de la construction initiale était d'environ 5 minutes avec un bouton, donc l'explication est omise.

La première fois qu'il est construit manuellement et la deuxième fois et les suivantes sont utilisées via l'API. Tous les détails de l'API utilisée cette fois sont décrits dans le document officiel.

1. Exécution de la construction

Si la construction échoue, HTTP Status: 202 sera renvoyé. L'URL du fichier complété est un fichier séparé

u.py


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals

import requests

API_TOKEN = "****"
ORGID = "****"
PROJECTS = "****"
BUILD_TARGETS = "****"


def get_url(func_name, extend=None):
    auth_base = "orgs/{orgid}/projects/{projectid}/buildtargets/{buildtargetid}".format(orgid=ORGID,
                                                                                        projectid=PROJECTS,
                                                                                        buildtargetid=BUILD_TARGETS)
    if extend:
        url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}{extend}"
        return url_base.format(auth=auth_base, func=func_name, extend=extend)

    url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}"
    return url_base.format(auth=auth_base, func=func_name)


def get_headers():
    return {
        "Content-Type": "application/json",
        "Authorization": "Basic {token}".format(token=API_TOKEN),
    }


def execute_build():
    """
Exécution de la construction

    #Système semi-normal Déjà en construction
    [{"buildtargetid":"****","buildTargetName":"****","error":"Cannot start build - already a build pending."}] 202
    """
    response = requests.post(get_url("builds"), headers=get_headers(), data={})
    print(response.text), response.status_code
    return

#Exécution de la construction
execute_build()

2. Obtenir l'état de la version

L'état de la construction est le suivant {mis en file d'attente, sentToBuilder, démarré, redémarré, succès, échec, annulé, inconnu} S'il n'y a pas de frais, le temps d'attente est long. Si la construction réussit, ce sera un succès

u.py



def get_builds():
    """
Vous pouvez obtenir les 25 dernières informations de build.
Si vous souhaitez obtenir des données plus anciennes, par_Modifier les paramètres de page et de page
    """
    response = requests.get(get_url("builds"), headers=get_headers())
    print(response.text), response.status_code
    return


def get_build(number):
    """
Vous pouvez obtenir les informations de construction spécifiées

    #Système semi-normal
404 s'il n'existe pas: {"error":"The requested object was not found."}

    :param number: int
    """
    response = requests.get(get_url("builds", extend="/" + str(number)), headers=get_headers())
    print(response.text), response.status_code
    return


def get_latest_build():
    """
Vous pouvez obtenir la dernière version 1
    """
    build_start_result = requests.get(get_url("builds", extend="?per_page=1&page=1"), headers=get_headers())
    print(build_start_result.text), build_start_result.status_code
    return

#Obtenez une version spécifique
get_build(6)

#Obtenez la dernière version
get_latest_build()

#Obtenir un lot de compilation
get_build_status()

3. Annulation de la construction

Y a-t-il quelque chose que vous souhaitez annuler de l'API après sa mise en œuvre? J'ai pensé. Il s'agit d'une spécification à annuler avec une requête HTML DELETE. La requête DELETE est utilisée pour la première fois cette année. Le caractère de l'ingénieur qui a fait l'API fidèlement au principe REST a été en quelque sorte transmis.

u.py



def cancel_all():
    """
Annuler toutes les compilations
    """
    response = requests.delete(get_url("builds"), headers=get_headers())
    print(response.text), response.status_code


def cancel(number):
    """
Annuler une compilation spécifique

    #Annulation réussie du système normal
    204

    #Le système semi-normal n'existe pas
    {"error":"The requested object was not found."} 404

    #Lorsque vous spécifiez une construction qui a terminé une construction quasi-normale
    204

    :param number: int
    """
    response = requests.delete(get_url("builds", extend="/" + str(number)), headers=get_headers())
    print(response.text), response.status_code


#Annulation de build spécifique
cancel(7)

#Annuler toutes les compilations
cancel_all()

4. Obtenir l'URL de téléchargement

Si la construction réussit, le fichier sera téléchargé sur S3. Une fonction pour obtenir l'URL à télécharger.

u.py



def get_latest_build_download_urls():
    """
Télécharger l'URL de la dernière version réussie

    :return: str
    """
    response = requests.get(get_url("builds", extend="?buildStatus=success&per_page=1&page=1"),
                                      headers=get_headers())
    data = ujson.loads(response.text)
    assert len(data) > 0
    return data[0].get('links').get('download_primary').get('href')

#Télécharger l'URL de la dernière version réussie
print get_latest_build_download_urls()

Source complète de tous

u.py


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals

import requests
import ujson

API_TOKEN = "****"
ORGID = "****"
PROJECTS = "****"
BUILD_TARGETS = "****"


def get_url(func_name, extend=None):
    auth_base = "orgs/{orgid}/projects/{projectid}/buildtargets/{buildtargetid}".format(orgid=ORGID,
                                                                                        projectid=PROJECTS,
                                                                                        buildtargetid=BUILD_TARGETS)
    if extend:
        url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}{extend}"
        return url_base.format(auth=auth_base, func=func_name, extend=extend)

    url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}"
    return url_base.format(auth=auth_base, func=func_name)


def get_headers():
    return {
        "Content-Type": "application/json",
        "Authorization": "Basic {token}".format(token=API_TOKEN),
    }


def execute_build():
    """
Exécution de la construction

    #Système semi-normal Déjà en construction
    [{"buildtargetid":"****","buildTargetName":"****","error":"Cannot start build - already a build pending."}] 202
    """
    response = requests.post(get_url("builds"), headers=get_headers(), data={})
    print(response.text), response.status_code
    return


def get_builds():
    """
Vous pouvez obtenir les 25 dernières informations de build.
Si vous souhaitez obtenir des données plus anciennes, par_Modifier les paramètres de page et de page
    """
    response = requests.get(get_url("builds"), headers=get_headers())
    print(response.text), response.status_code
    return


def get_build(number):
    """
Vous pouvez obtenir les informations de construction spécifiées

    #Système semi-normal
404 s'il n'existe pas: {"error":"The requested object was not found."}

    :param number: int
    """
    response = requests.get(get_url("builds", extend="/" + str(number)), headers=get_headers())
    print(response.text), response.status_code
    return


def get_latest_build():
    """
Vous pouvez obtenir la dernière version 1
    """
    build_start_result = requests.get(get_url("builds", extend="?per_page=1&page=1"), headers=get_headers())
    print(build_start_result.text), build_start_result.status_code
    return


def get_latest_build_download_urls():
    """
Télécharger l'URL de la dernière version réussie

    :return: str
    """
    response = requests.get(get_url("builds", extend="?buildStatus=success&per_page=1&page=1"),
                                      headers=get_headers())
    data = ujson.loads(response.text)
    assert len(data) > 0
    return data[0].get('links').get('download_primary').get('href')


def cancel_all():
    """
Annuler toutes les compilations
    """
    response = requests.delete(get_url("builds"), headers=get_headers())
    print(response.text), response.status_code


def cancel(number):
    """
Annuler une compilation spécifique

    #Annulation réussie du système normal
    204

    #Le système semi-normal n'existe pas
    {"error":"The requested object was not found."} 404

    #Lorsque vous spécifiez une construction qui a terminé une construction quasi-normale
    204

    :param number: int
    """
    response = requests.delete(get_url("builds", extend="/" + str(number)), headers=get_headers())
    print(response.text), response.status_code


#Annulation de build spécifique
# cancel(7)

#Annuler toutes les compilations
# cancel_all()

#Obtenez une version spécifique
# get_build(6)

#Obtenez la dernière version
# get_latest_build()

#Obtenir un lot de compilation
# get_build_status()

#Exécution de la construction
# execute_build()

#Télécharger l'URL de la dernière version réussie
print get_latest_build_download_urls()

Recommended Posts

J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai essayé d'utiliser Thonny (Python / IDE)
Exécutez Ansible à partir de Python à l'aide de l'API
J'ai essayé d'utiliser l'API checkio
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
J'ai essayé d'utiliser l'optimisation bayésienne de Python
J'ai essayé d'utiliser Headless Chrome de Selenium
J'ai essayé d'utiliser l'API BigQuery Storage
[Python] J'ai essayé d'obtenir diverses informations en utilisant l'API de données YouTube!
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé Python> autopep8
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé Python> décorateur
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé d'utiliser l'API Detect Labels d'AWS Rekognition
J'ai essayé d'utiliser l'API à distance avec GAE / J
J'ai essayé d'accéder à l'API Qiita depuis le début
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé le web scraping en utilisant python et sélénium
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
J'ai essayé Python! ] Diplômé aujourd'hui de "Tout le monde Python! Qu'est-ce que Python!"!
J'ai essayé d'utiliser mecab avec python2.7, ruby2.3, php7
J'ai essayé de lire un fichier CSV en utilisant Python
J'ai essayé d'utiliser le module Datetime de Python
Aplatir à l'aide du rendement Python de
J'ai essayé fp-growth avec python
[Python] J'ai immédiatement essayé d'utiliser l'extension VS Code de Pylance.
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser TradeWave (commerce du système BitCoin en Python)
J'ai essayé d'utiliser easydict (mémo).
Notification PUSH de Python vers Android à l'aide de l'API de Google