in vmap_generation/vast_xml/vast.py [0:0]
def toElement(self, doc):
vastElement = doc.createElement("VAST")
vastElement.setAttribute("version", self.version)
if len(self.ads) == 0 and self.VASTErrorURI:
errorElement = doc.createElement("Error")
errorElement.appendChild(doc.createCDATASection(self.VASTErrorURI))
vastElement.appendChild(errorElement)
return vastElement
for ad in self.ads:
adOptions = {"id": ad.id}
if ad.sequence:
adOptions["sequence"] = str(ad.sequence)
adElement = doc.createElement("Ad")
vastElement.appendChild(adElement)
inLineElement = doc.createElement("InLine")
adSystemElement = doc.createElement("AdSystem")
adSystemElement.appendChild(doc.createTextNode(ad.AdSystem["name"]))
inLineElement.appendChild(adSystemElement)
adTitleElement = doc.createElement("AdTitle")
adTitleElement.appendChild(doc.createTextNode(ad.AdTitle))
inLineElement.appendChild(adTitleElement)
descriptionElement = doc.createElement("Description")
descriptionElement.appendChild(doc.createCDATASection(ad.Description or ""))
inLineElement.appendChild(descriptionElement)
for survey in ad.surveys:
surveyElement = doc.createElement("Survey")
if survey.type:
surveyElement.setAttribute("type", survey.type)
surveyElement.appendChild(doc.createCDATASection(survey.url))
inLineElement.appendChild(surveyElement)
if ad.Error:
errorElement = doc.createElement("Error")
errorElement.appendChild(doc.createCDATASection(ad.Error))
inLineElement.appendChild(errorElement)
for impression in ad.impressions:
impressionElement = doc.createElement("Impression")
if "url" in impression:
impressionElement.appendChild(doc.createCDATASection(impression["url"]))
inLineElement.appendChild(impressionElement)
creativesElement = doc.createElement("Creatives")
linearCreatives = [c for c in ad.creatives if c.type == "Linear"]
nonLinearCreatives = [c for c in ad.creatives if c.type == "NonLinear"]
companionAdCreatives = [c for c in ad.creatives if c.type == "CompanionAd"]
for creative in linearCreatives:
creativeElement = doc.createElement("Creative")
linearElement = doc.createElement("Linear")
if creative.skipoffset:
linearElement.setAttribute("skipoffset", creative.skipoffset)
if len(creative.icons) > 0:
iconsElement = doc.createElement("Icons")
linearElement.appendChild(iconsElement)
for icon in creative.icons:
iconElement = doc.createElement("Icon")
iconsElement.appendChild(iconElement)
for key, value in icon.attributes.items():
iconElement.setAttribute(key, value)
resourceElement = doc.createElement(icon.resource["type"])
iconElement.appendChild(resourceElement)
resourceElement.appendChild(doc.createCDATASection(icon.resource["uri"]))
if "creativeType" in icon.resource:
resourceElement.setAttribute("creativeType", icon.resource["creativeType"])
if icon.click or icon.clickThrough:
iconClicksElement = doc.createElement("IconClicks")
iconElement.appendChild(iconClicksElement)
if icon.clickThrough:
iconClickThroughElement = doc.createElement("IconClickThrough")
iconClicksElement.appendChild(iconClickThroughElement)
iconClickThroughElement.appendChild(doc.createCDATASection(icon.clickThrough))
if icon.click:
iconClickTrackingElement = doc.createElement("IconClickTracking")
iconClicksElement.appendChild(iconClickTrackingElement)
iconClickTrackingElement.appendChild(doc.createCDATASection(icon.click))
if icon.view:
response.IconViewTracking(self.cdata(icon.view))
durationElement = doc.createElement("Duration")
durationElement.appendChild(doc.createTextNode(creative.duration))
linearElement.appendChild(durationElement)
trackingEventsElement = doc.createElementNS("http://www.iab.net/videosuite/vmap", "vmap:TrackingEvents")
linearElement.appendChild(trackingEventsElement)
for event in creative.trackingEvents:
trackingElement = doc.createElementNS("http://www.iab.net/videosuite/vmap", "vmap:Tracking")
trackingElement.setAttribute("event", event.event)
if event.offset:
trackingElement.setAttribute("offset", event.offset)
trackingElement.appendChild(doc.createCDATASection(event.url))
trackingEventsElement.appendChild(trackingElement)
if creative.AdParameters:
adParametersElement = doc.createElement("AdParameters")
adParametersElement.setAttribute("xmlEncoded", creative.AdParameters["xmlEncoded"])
adParametersElement.appendChild(doc.createTextNode(creative.AdParameters))
linearElement.appendChild(adParametersElement)
for click in creative.videoClicks:
clickElement = doc.createElement(click["type"])
clickElement.setAttribute("id", click.get("id", ""))
clickElement.appendChild(doc.createCDATASection(click["url"]))
nonLinearElement.appendChild(clickElement)
mediaFilesElement = doc.createElement("MediaFiles")
for media in creative.mediaFiles:
mediaFileElement = doc.createElement("MediaFile")
mediaFileElement.appendChild(doc.createCDATASection(media["url"]))
for key, value in media["attributes"].items():
mediaFileElement.setAttribute(key, value)
mediaFilesElement.appendChild(mediaFileElement)
linearElement.appendChild(mediaFilesElement)
creativeElement.appendChild(linearElement)
creativesElement.appendChild(creativeElement)
for creative in nonLinearCreatives:
creativeElement = doc.createElement("Creative")
nonLinearAdsElement = doc.createElement("NonLinearAds")
nonLinearElement = doc.createElement("NonLinear")
for key, value in creative.attributes.items():
nonLinearElement.setAttribute(key, value)
for resource in creative.resources:
resourceElement = doc.createElement(resource["type"])
if "creativeType" in resource:
resourceElement.setAttribute("creativeType", resource["creativeType"])
resourceElement.appendChild(doc.createCDATASection(resource["uri"]))
nonLinearElement.appendChild(resourceElement)
for click in creative.clicks:
clickElement = doc.createElement(click["type"])
clickElement.appendChild(doc.createCDATASection(click["uri"]))
nonLinearElement.appendChild(clickElement)
if creative.AdParameters:
adParametersElement = doc.createElement("AdParameters")
adParametersElement.setAttribute("xmlEncoded", creative.AdParameters["xmlEncoded"])
adParametersElement.appendChild(doc.createTextNode(creative.AdParameters["data"]))
nonLinearElement.appendChild(adParametersElement)
if creative.nonLinearClickThrough:
clickThroughElement = doc.createElement("NonLinearClickThrough")
clickThroughElement.appendChild(doc.createCDATASection(creative.nonLinearClickThrough))
nonLinearElement.appendChild(clickThroughElement)
if creative.nonLinearClickTracking:
clickTrackingElement = doc.createElement("NonLinearClickTracking")
clickTrackingElement.appendChild(doc.createCDATASection(creative.nonLinearClickTracking))
nonLinearElement.appendChild(clickTrackingElement)
nonLinearAdsElement.appendChild(nonLinearElement)
creativeElement.appendChild(nonLinearAdsElement)
creativesElement.appendChild(creativeElement)
if len(companionAdCreatives) > 0:
companionAdsElement = doc.createElement("CompanionAds")
for creative in companionAdCreatives:
companionElement = doc.createElement("Companion")
for key, value in creative.attributes.items():
companionElement.setAttribute(key, value)
for resource in creative.resources:
resourceElement = doc.createElement(resource["type"])
if "creativeType" in resource:
resourceElement.setAttribute("creativeType", resource["creativeType"])
resourceElement.appendChild(doc.createCDATASection(resource["uri"]))
companionElement.appendChild(resourceElement)
if "adParameters" in resource:
adParametersElement = doc.createElement("AdParameters")
adParametersElement.setAttribute("xmlEncoded", resource["adParameters"]["xmlEncoded"])
adParametersElement.appendChild(doc.createTextNode(resource["adParameters"]["data"]))
companionElement.appendChild(adParametersElement)
for click in creative.clickThroughs:
clickThroughElement = doc.createElement("CompanionClickThrough")
clickThroughElement.appendChild(doc.createCDATASection(click))
companionElement.appendChild(clickThroughElement)
if creative.nonLinearClickTracking:
clickTrackingElement = doc.createElement("CompanionClickTracking")
clickTrackingElement.appendChild(doc.createCDATASection(creative.nonLinearClickTracking))
companionElement.appendChild(clickTrackingElement)
companionAdsElement.appendChild(companionElement)
creativesElement.appendChild(companionAdsElement)
inLineElement.appendChild(creativesElement)
adElement.appendChild(inLineElement)
return vastElement