2016-08-31 7 views
1

I持っているチームシティーへの投稿のXMLは新しいVCSルートを作成することを、次のコード:投稿XML使用してPythonのリクエスト

def addVcsRoot(vcsRootId, vcsRootName, projectId, projectName, buildName, repoId, teamAdminUser, teamAdminPass): 
    headers = {'Content-type': 'application/xml'} 
    data = ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + 
     "<vcs-root id=\"" + vcsRootId + "\" " + "name=\"" + vcsRootName + "\" " + 
     "vcsName=\"jetbrains.git\" href=\"/app/rest/vcs-roots/id:" + vcsRootId + "\">" + 
     "<project id=\"" + projectId + "\" " "name=\"" + projectName + "\" " "parentProjectId=\"_Root\" " + 
     "description=\"Single repository for all components\" href=\"/app/rest/projects/id:" + projectId + 
     "\" " + "webUrl=\"http://teamcity.company.com/project.html?projectId=" + projectId + "\"/>" + 
     "<properties count=\"11\">" + "<property name=\"agentCleanFilesPolicy\" value=\"ALL_UNTRACKED\"/>" + 
     "<property name=\"agentCleanPolicy\" value=\"ON_BRANCH_CHANGE\"/>" + 
     "<property name=\"authMethod\" value=\"PASSWORD\"/>" + 
     "<property name=\"branch\" value=\"refs/heads/master\"/>" + 
     "<property name=\"ignoreKnownHosts\" value=\"true\"/>" + 
     "<property name=\"submoduleCheckout\" value=\"CHECKOUT\"/>" + 
     "<property name=\"url\" value=\"https://source.company.com/scm/" +repoId + "/" + buildName + 
     ".git\"" + "/>" + "<property name=\"username\" value=\"" + teamAdminUser + "\"/>" + 
     "<property name=\"usernameStyle\" value=\"USERID\"/>" + 
     "<property name=\"secure:password\" value=\"" + teamAdminPass + "\"/>" + 
     "<property name=\"useAlternates\" value=\"true\"/>" + "</properties>" + 
     "<vcsRootInstances href=\"/app/rest/vcs-root-instances?locator=vcsRoot:(id:" + vcsRootId + ")" + 
     "\"" + "/>" + "</vcs-root>") 
    url = path + 'vcs-roots' 
    return requests.post(url, auth=auth, headers=headers, data=data) 

私はxmlファイルがどのように見えるか見ることをやったので、それをしたがビルドごとに異なるパラメータを入力することができ、スクリプトは正常に動作します。私の質問です:これを行うよりエレガントな方法はありますか?この長い文字列を連結して投稿するのは、醜く非効率的です。リクエストを使ってxmlを投稿する他の方法は何ですか?

答えて

1

私ははるかに少ない乱雑コードになりますstr.format、kwargsa三重引用符で囲まれた文字列を使用して、それはすべてを書き直すつもりはありません。そして、

def addVcsRoot(**kwargs): 
    headers = {'Content-type': 'application/xml'} 

    data = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
     <vcs-root id="{vcsRootId}" name="{vcsRootName}" 
     "vcsName="jetbrains.git" href="/app/rest/vcs-roots/id:"{vcsRootId}"\>""".format(**kwargs) 

addVcsRoot(vcsRootId=1234, ......) 

をか名前付き引数をそのまま使用したい場合:

def addVcsRoot(vcsRootId, vcsRootName, projectId, projectName, buildName, repoId, teamAdminUser, teamAdminPass) 
    headers = {'Content-type': 'application/xml'} 

    data = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <vcs-root id="{vcsRootId}" name="{vcsRootName}" 
    "vcsName="jetbrains.git" href="/app/rest/vcs-roots/id:"{vcsRootId}"\>"""\ 
    .format(vcsRootI=vcsRootId, vcsRootName=vcsRootName.....) 
+0

ありがとう!これはそれをきれいにしました。 –

関連する問題