Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
__pycache__
*.swp
ddexui
__pycache__
*.swp
ddexui
*.swn
*.swo
out
PIL
build
EGG-INFO
eggs.pth
/wheelhouse/
45 changes: 45 additions & 0 deletions ddex/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import xml.etree.cElementTree as ET
import datetime
from ddex.message_header import MessageHeader
from ddex.release import ReleaseIdType


def generate_batch_id(now=datetime.datetime.now):
return now().strftime("%Y%m%d%H%M%S%f")[:-3]

class DDEX:

def __init__(self, sender, recipient, releases=[], resources=[], update=False):
self.update = update
self.releases = releases
self.resources = resources
self.sender = sender
self.recipient = recipient

def write(self, file_name):
root = ET.Element("ernm:NewReleaseMessage", {'MessageSchemaVersionId': 'ern/341', 'LanguageAndScriptCode': 'en', 'xs:schemaLocation': 'http://ddex.net/xml/ern/341 http://ddex.net/xml/ern/341/release-notification.xsd', 'xmlns:ernm': 'http://ddex.net/xml/ern/341', 'xmlns:xs':'http://www.w3.org/2001/XMLSchema-instance'})
header = self.__write_message_header(root)
root.append(header)

update_indicator = ET.SubElement(root, "UpdateIndicator")
if(self.update):
update_indicator.text = "UpdateMessage"
else:
update_indicator.text = "OriginalMessage"

resource_list = ET.SubElement(root, "ResourceList")
for resource in self.resources:
resource_list.append(resource.write())

release_list = ET.SubElement(root, "ReleaseList")
deal_list = ET.SubElement(root, "DealList")

for release in self.releases:
release_list.append(release.write())
deal_list.append(release.write_deals())

tree = ET.ElementTree(root)
tree.write(file_name)

def __write_message_header(self, root):
return MessageHeader(self.sender, self.recipient).write();
44 changes: 0 additions & 44 deletions ddex/ddex.py

This file was deleted.

8 changes: 4 additions & 4 deletions ddex/ddex_builder.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from DDEXUI.ddex.ddex import DDEX
from DDEXUI.ddex.resource import Resource
from DDEXUI.ddex.release import ReleaseIdType
from ddex import DDEX
from ddex.resource import Resource
from ddex.release import ReleaseIdType

class DDEXBuilder:
def __init__(self):
Expand Down Expand Up @@ -39,7 +39,7 @@ def build(self):

def get_upc(self):
try:
return list(filter(lambda release: release.release_id.type == ReleaseIdType.Upc, self._releases))[0].release_id.id
return list(filter(lambda release: release.release_id.type == ReleaseIdType.Upc, self._releases))[0].release_id.id
except Exception as e:
print("No product release!")
raise e
2 changes: 1 addition & 1 deletion ddex/file_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ def __init__(self, md5, name, extension):
self.name = name
self.extension = extension

class ImageFileMetadata:
class ImageFileMetadata(FileMetadata):
def __init__(self, md5, name, extension, width, height):
FileMetadata.__init__(self, md5, name, extension)
self.width = width
Expand Down
1 change: 0 additions & 1 deletion ddex/message_header.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ class MessageHeader:
def __init__(self, sender, recipient):
self.sender = sender
self.recipient = recipient


def write(self):
message_header = ET.Element('MessageHeader')
Expand Down
2 changes: 1 addition & 1 deletion ddex/party.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import xml.etree.cElementTree as ET
from DDEXUI.ddex.enum import enum
from ddex.enum import enum

PartyType = enum(MessageSender=1, MessageRecipient=2)

Expand Down
230 changes: 115 additions & 115 deletions ddex/release.py
Original file line number Diff line number Diff line change
@@ -1,115 +1,115 @@
import xml.etree.cElementTree as ET
from DDEXUI.ddex.enum import enum
ReleaseIdType = enum(Upc=1, Isrc=2)
ReleaseType = enum(Single=1)
class ReleaseId:
def __init__(self, type, id):
self.type = type
self.id = id
def write(self):
name = None
attrs = {}
if(self.type == ReleaseIdType.Upc):
name = "ICPN"
attrs = {"IsEan": "false"}
elif(self.type == ReleaseIdType.Isrc):
name = "ISRC"
element = ET.Element(name, attrs)
element.text = self.id
return element
class Release:
def __init__(self, title, cline, pline, year, release_reference, release_id, release_type, artist, label, parental_warning):
self.release_type = release_type
self.release_id = release_id
self.genres = []
self.pline = pline
self.release_reference = release_reference
self.cline = cline
self.year = str(year)
self.title = title
self.artist = artist
self.label = label
self.deals = []
self.release_resource_references = []
if(parental_warning):
self.parental_warning = "Explicit"
else:
self.parental_warning = "NotExplicit"
def write(self):
release = ET.Element("Release")
releaseId = ET.SubElement(release, "ReleaseId")
releaseId.append(self.release_id.write())
self.__add_element(release, "ReleaseReference", self.release_reference)
referenceTitle = ET.SubElement(release, "ReferenceTitle")
self.__add_element(referenceTitle, "TitleText", self.title)
resource_reference_list = ET.SubElement(release, "ReleaseResourceReferenceList")
resource_group = ET.Element("ResourceGroup")
i = 0
for ref, ref_type in self.release_resource_references:
self.__add_element(resource_reference_list, "ReleaseResourceReference", ref, {"ReleaseResourceType":ref_type})
content_item = self.__add_element(resource_group, "ResourceGroupContentItem")
self.__add_element(content_item, "SequenceNumber", str(i + 1))
self.__add_element(content_item, "ResourceType", "SoundRecording")
self.__add_element(content_item, "ReleaseResourceReference", ref)
i = i+1
self.__add_element(release, "ReleaseType", self.release_type)
release_details_by_territory = ET.SubElement(release, "ReleaseDetailsByTerritory")
ET.SubElement(release_details_by_territory, "TerritoryCode").text = "Worldwide"
self.__add_element(release_details_by_territory, "DisplayArtistName", self.artist)
self.__add_element(release_details_by_territory, "LabelName", self.label)
self.__write_titles(release, release_details_by_territory)
self.__write_genres(release_details_by_territory)
self.__write_artist(release_details_by_territory)
self.__add_element(release_details_by_territory, "ParentalWarningType", self.parental_warning)
release_details_by_territory.append(resource_group)
pline = ET.SubElement(release, "PLine")
self.__add_element(pline, "Year", self.year)
self.__add_element(pline, "PLineText", self.pline)
cline = ET.SubElement(release, "CLine")
self.__add_element(cline, "Year", self.year)
self.__add_element(cline, "CLineText", self.cline)
return release
def __add_element(self, parent, name, text="", attrs={}):
element = ET.SubElement(parent, name, attrs)
element.text = text
return element
def __write_artist(self, release_details_by_territory):
artist = ET.SubElement(release_details_by_territory, "DisplayArtist")
party_name = ET.SubElement(artist, "PartyName")
self.__add_element(party_name, "FullName", self.artist)
self.__add_element(artist, "ArtistRole", "MainArtist")
def __write_genres(self, release_details_by_territory):
for genre in self.genres:
genreElement = ET.SubElement(release_details_by_territory, "Genre")
ET.SubElement(genreElement, "GenreText").text = genre
def __write_titles(self, release, release_details_by_territory):
for type in ["FormalTitle", "DisplayTitle", "GroupingTitle"]:
self.__add_title(release_details_by_territory, type)
def __add_title(self, release_details_by_territory, type):
title = ET.SubElement(release_details_by_territory, "Title", {"TitleType": type})
self.__add_element(title, "TitleText", self.title)
def add_deal(self, deal):
self.deals.append(deal)
def add_resource_reference(self, reference, release_resource_type="PrimaryResource"):
self.release_resource_references.append((reference, release_resource_type))
def write_deals(self):
release_deal = ET.Element("ReleaseDeal")
self.__add_element(release_deal, "DealReleaseReference", self.release_reference)
for deal in self.deals:
release_deal.append(deal.write())
return release_deal
import xml.etree.cElementTree as ET
from ddex.enum import enum

ReleaseIdType = enum(Upc=1, Isrc=2)
ReleaseType = enum(Single=1)

class ReleaseId:
def __init__(self, type, id):
self.type = type
self.id = id

def write(self):
name = None
attrs = {}
if(self.type == ReleaseIdType.Upc):
name = "ICPN"
attrs = {"IsEan": "false"}
elif(self.type == ReleaseIdType.Isrc):
name = "ISRC"
element = ET.Element(name, attrs)
element.text = self.id
return element

class Release:
def __init__(self, title, cline, pline, year, release_reference, release_id, release_type, artist, label, parental_warning):
self.release_type = release_type
self.release_id = release_id
self.genres = []
self.pline = pline
self.release_reference = release_reference
self.cline = cline
self.year = str(year)
self.title = title
self.artist = artist
self.label = label
self.deals = []
self.release_resource_references = []
if(parental_warning):
self.parental_warning = "Explicit"
else:
self.parental_warning = "NotExplicit"

def write(self):
release = ET.Element("Release")
releaseId = ET.SubElement(release, "ReleaseId")
releaseId.append(self.release_id.write())
self.__add_element(release, "ReleaseReference", self.release_reference)
referenceTitle = ET.SubElement(release, "ReferenceTitle")
self.__add_element(referenceTitle, "TitleText", self.title)
resource_reference_list = ET.SubElement(release, "ReleaseResourceReferenceList")

resource_group = ET.Element("ResourceGroup")
i = 0
for ref, ref_type in self.release_resource_references:
self.__add_element(resource_reference_list, "ReleaseResourceReference", ref, {"ReleaseResourceType":ref_type})
content_item = self.__add_element(resource_group, "ResourceGroupContentItem")
self.__add_element(content_item, "SequenceNumber", str(i + 1))
self.__add_element(content_item, "ResourceType", "SoundRecording")
self.__add_element(content_item, "ReleaseResourceReference", ref)
i = i+1

self.__add_element(release, "ReleaseType", self.release_type)
release_details_by_territory = ET.SubElement(release, "ReleaseDetailsByTerritory")
ET.SubElement(release_details_by_territory, "TerritoryCode").text = "Worldwide"
self.__add_element(release_details_by_territory, "DisplayArtistName", self.artist)
self.__add_element(release_details_by_territory, "LabelName", self.label)
self.__write_titles(release, release_details_by_territory)
self.__write_genres(release_details_by_territory)
self.__write_artist(release_details_by_territory)
self.__add_element(release_details_by_territory, "ParentalWarningType", self.parental_warning)
release_details_by_territory.append(resource_group)
pline = ET.SubElement(release, "PLine")
self.__add_element(pline, "Year", self.year)
self.__add_element(pline, "PLineText", self.pline)
cline = ET.SubElement(release, "CLine")
self.__add_element(cline, "Year", self.year)
self.__add_element(cline, "CLineText", self.cline)
return release

def __add_element(self, parent, name, text="", attrs={}):
element = ET.SubElement(parent, name, attrs)
element.text = text
return element

def __write_artist(self, release_details_by_territory):
artist = ET.SubElement(release_details_by_territory, "DisplayArtist")
party_name = ET.SubElement(artist, "PartyName")
self.__add_element(party_name, "FullName", self.artist)
self.__add_element(artist, "ArtistRole", "MainArtist")

def __write_genres(self, release_details_by_territory):
for genre in self.genres:
genreElement = ET.SubElement(release_details_by_territory, "Genre")
ET.SubElement(genreElement, "GenreText").text = genre

def __write_titles(self, release, release_details_by_territory):
for type in ["FormalTitle", "DisplayTitle", "GroupingTitle"]:
self.__add_title(release_details_by_territory, type)

def __add_title(self, release_details_by_territory, type):
title = ET.SubElement(release_details_by_territory, "Title", {"TitleType": type})
self.__add_element(title, "TitleText", self.title)

def add_deal(self, deal):
self.deals.append(deal)

def add_resource_reference(self, reference, release_resource_type="PrimaryResource"):
self.release_resource_references.append((reference, release_resource_type))

def write_deals(self):
release_deal = ET.Element("ReleaseDeal")
self.__add_element(release_deal, "DealReleaseReference", self.release_reference)
for deal in self.deals:
release_deal.append(deal.write())
return release_deal
2 changes: 1 addition & 1 deletion ddex/release_builder.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from DDEXUI.ddex.release import *
from ddex.release import *

class ReleaseBuilder:
def __init__(self):
Expand Down
Loading