buildframework/helium/sf/python/pythoncore/lib/symrec.py
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 588 c7c26511138f
child 645 b8d81fa19e7d
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
#============================================================================ 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
#Name        : symrec.py 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
#Part of     : Helium 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
#All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
#This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
#under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
#which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
#at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
#Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
#Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
#Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
#Description:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
#===============================================================================
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
""" SYMREC metadata file generation. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import xml.dom.minidom
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
import codecs
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
import os
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
import re
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
import logging
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import fileutils
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
import csv
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
LOGGER = logging.getLogger("symrec")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
logging.basicConfig(level=logging.INFO)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    32
def _cleanup_list(input_):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
    33
    """cleanup  list"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
    result = []
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    35
    for chars in input_:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
        if chars is not None and chars.strip() != "":
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
            result.append(chars)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
    return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
def xml_setattr(node, attr, value):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
    """ Create the attribute if needed. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
    node.setAttribute(attr, value)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
def is_child_text_only(node):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
    """ Returns true if child node are all from TEXT_NODE type. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
    for child in node.childNodes:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
        if child.nodeType != xml.dom.minidom.Node.TEXT_NODE:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
            return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
    return True
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
def ignore_whitespace_writexml(self, writer, indent="", addindent="", newl=""):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
    """ This version of writexml will ignore whitespace text to alway render
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
    the output in a structure way.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
    indent = current indentation
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
    addindent = indentation to add to higher levels
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
    newl = newline string
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
    """
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    59
    # pylint: disable=W0212
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
    writer.write(indent + "<" + self.tagName)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
    attrs = self._get_attributes()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
    a_names = attrs.keys()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
    a_names.sort()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
    for a_name in a_names:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
        writer.write(" %s=\"" % a_name)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
        xml.dom.minidom._write_data(writer, attrs[a_name].value)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
        writer.write("\"")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
    if self.childNodes:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
        writer.write(">")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
        if is_child_text_only(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
            for node in self.childNodes:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
                node.writexml(writer, '', '', '')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
            writer.write("</%s>%s" % (self.tagName, newl))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
            writer.write(newl)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
            for node in self.childNodes:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
                if node.nodeType == xml.dom.minidom.Node.TEXT_NODE and node.data.isspace():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
                    pass
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
                else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
                    node.writexml(writer, indent + addindent, addindent, newl)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
            writer.write("%s</%s>%s" % (indent, self.tagName, newl))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
    else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
        writer.write("/>%s" % (newl))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
xml.dom.minidom.Element.writexml = ignore_whitespace_writexml
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
class ServicePack(object):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
    """ Create a ServicePack """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
    def __init__(self, node):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
        self.__xml = node
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
    @property
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
    def name(self):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
    97
        """name"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
        return self.__xml.getAttribute('name')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
    @property
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
    def files(self):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   102
        """files"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
        result = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
        for filen in self.__xml.getElementsByTagName('file'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
            result.append(filen.getAttribute('name'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
        return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
    @property
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
    def instructions(self):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   110
        """instructions"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
        result = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
        for instr in self.__xml.getElementsByTagName('instructions'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
            result.append(instr.getAttribute('name'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
        return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   116
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
class ReleaseMetadata(object):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
    """ Create or read Metadata XML from SYMREC/SYMDEC. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
    def __init__(self, filename, service=None, product=None, release=None):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
        self._filename = filename
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
        if filename and os.path.exists(filename):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
            self._xml = xml.dom.minidom.parse(open(filename, "r"))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
            releaseInformation = self._xml.getElementsByTagName(u"releaseInformation")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
            if releaseInformation != []:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
                self._releaseInformation = releaseInformation[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
            else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
                self._releaseInformation = self._xml.createElement(u"releaseInformation")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
            releaseDetails = self._xml.getElementsByTagName(u'releaseDetails')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
            if releaseDetails != []:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   131
                self._releaseDetails = releaseDetails[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   132
            else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   133
                self._releaseDetails = self._xml.createElement(u'releaseDetails')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   134
            releaseFiles = self._xml.getElementsByTagName(u'releaseFiles')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
            if releaseFiles != []:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
                self._releaseFiles = releaseFiles[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
            else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
                self._releaseFiles = self._xml.createElement(u'releaseFiles')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
                
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
            if service != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
                self.service = service
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
            if product != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
                self.product = product
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
            if release != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
                self.release = release
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   146
        elif service != None and product != None and release != None:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
            self._xml = xml.dom.minidom.Document()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   148
            self._releaseInformation = self._xml.createElement(u"releaseInformation")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
            self._xml.appendChild(self._releaseInformation)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
            self._releaseDetails = self._xml.createElement(u'releaseDetails')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
            self._releaseInformation.appendChild(self._releaseDetails)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
            releaseID = self._xml.createElement(u'releaseID')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
            self._releaseDetails.appendChild(releaseID)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
            #           service
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   156
            serv = self._xml.createElement(u'service')
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
            xml_setattr(serv, 'name', unicode(service))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
            releaseID.appendChild(serv)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
            #           product
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
            prod = self._xml.createElement(u'product')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
            xml_setattr(prod, 'name', unicode(product))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
            releaseID.appendChild(prod)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
            #           release
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
            rel = self._xml.createElement(u'release')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
            xml_setattr(rel, 'name', unicode(release))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
            releaseID.appendChild(rel)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   167
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   168
            #    releaseFiles
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   169
            self._releaseFiles = self._xml.createElement(u'releaseFiles')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
            self._releaseInformation.appendChild(self._releaseFiles)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
            #    releaseFiles
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   173
            self._releaseInformation.appendChild(self._xml.createElement(u'externalFiles'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
        else:
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   175
            raise IOError("Error metadata file doesn't exists.")
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
    def get_dependsof(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   178
        """ Return a ReleaseMetada object pointing to the dependency release. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   179
        if self.dependsof_service != None and self.dependsof_product != None and self.dependsof_release != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   180
            filename = os.path.join(os.path.dirname(self._filename), "../../..",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   181
                                self.dependsof_service,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   182
                                self.dependsof_product,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   183
                                self.dependsof_release)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   184
            return ReleaseMetadata(find_latest_metadata(filename))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   185
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   186
            return None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   187
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   188
    def set_dependsof(self, filename):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   189
        """ Setting the dependency release. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   190
        metadata  = ReleaseMetadata(filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   191
        self.dependsof_service  = metadata.service
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   192
        self.dependsof_product  = metadata.product
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   193
        self.dependsof_release  = metadata.release
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   194
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   195
    def add_package(self, name, type_=None, default=True, filters=None, extract="single", md5checksum=None, size=None):
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   196
        """ Adding a package to the metadata file. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   197
        # check if update mode
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   198
        package = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   199
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   200
        for pkg in self._xml.getElementsByTagName('package'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   201
            if (pkg.getAttribute('name').lower() == os.path.basename(name).lower()):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   202
                package = pkg
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   203
                break
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   204
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   205
        # if not found create new package.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   206
        if package is None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   207
            package = self._xml.createElement(u'package')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   208
            self._releaseFiles.appendChild(package)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   209
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   210
        xml_setattr(package, 'name', os.path.basename(name))
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   211
        if type_ != None:
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   212
            xml_setattr(package, 'type', type_)
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   213
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   214
            xml_setattr(package, 'type', os.path.splitext(name)[1].lstrip('.'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   215
        xml_setattr(package, 'default', str(default).lower())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   216
        xml_setattr(package, 'extract', extract)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   217
        if filters and len(filters)>0:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   218
            xml_setattr(package, 'filters', ','.join(filters))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   219
            xml_setattr(package, 's60filter', ','.join(filters))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   220
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   221
            xml_setattr(package, 'filters', '')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   222
            xml_setattr(package, 's60filter', '')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   223
        if md5checksum != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   224
            xml_setattr(package, unicode("md5checksum"), unicode(md5checksum))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   225
        if size != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   226
            xml_setattr(package, unicode("size"), unicode(size))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   227
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   228
    def keys(self):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   229
        """keys"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   230
        keys = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   231
        for pkg in self._releaseFiles.getElementsByTagName('package'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   232
            keys.append(pkg.getAttribute('name'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   233
        return keys
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   234
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   235
    def __getitem__(self, key):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   236
        for pkg in self._releaseFiles.getElementsByTagName('package'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   237
            if pkg.getAttribute('name').lower() == key.lower():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   238
                filters = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   239
                s60filters = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   240
                md5checksum = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   241
                size = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   242
                if pkg.hasAttribute(u'filters'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   243
                    filters = _cleanup_list(pkg.getAttribute('filters').split(','))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   244
                if pkg.hasAttribute(u's60filter'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   245
                    s60filters = _cleanup_list(pkg.getAttribute('s60filter').split(','))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   246
                if pkg.hasAttribute(u'md5checksum'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   247
                    md5checksum = pkg.getAttribute('md5checksum')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   248
                if pkg.hasAttribute(u'size'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   249
                    size = pkg.getAttribute('size')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   250
                return {'type': pkg.getAttribute('type'), 'extract': pkg.getAttribute('extract'), 'default': (pkg.getAttribute('default')=="true"), \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   251
                         'filters': filters, 's60filter': s60filters, 'md5checksum': md5checksum, 'size': size}
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   252
        raise KeyError("Key '%s' not found." % key)
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   253
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   254
    def __setitem__(self, key, value):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   255
        self.add_package(key, value['type'], value['default'], value['filters'], value['extract'], value['md5checksum'], value['size'])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   256
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   257
    def set_releasedetails_info(self, name, value, details="releaseID"):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   258
        """ Generic function to set releaseid info. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   259
        detailsnode = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   260
        if self._releaseDetails.getElementsByTagName(details) == []:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   261
            detailsnode = self._xml.createElement(details)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   262
            self._releaseDetails.appendChild(detailsnode)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   263
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   264
            detailsnode = self._releaseDetails.getElementsByTagName(details)[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   265
        namenode = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   266
        if detailsnode.getElementsByTagName(name) == []:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   267
            namenode = self._xml.createElement(name)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   268
            namenode.setAttribute(u'name', unicode(value))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   269
            detailsnode.appendChild(namenode)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   270
        else:  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   271
            namenode = detailsnode.getElementsByTagName(name)[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   272
            namenode.setAttribute('name', value)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   273
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   274
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   275
    def get_releasedetails_info(self, name, details="releaseID"):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   276
        """ Generic function to extract releaseid info. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   277
        for group in self._releaseDetails.getElementsByTagName(details):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   278
            for i in group.getElementsByTagName(name):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   279
                return i.getAttribute('name')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   280
        return None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   281
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   282
    def getVariantPackage(self, variant_name):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   283
        """get variant package"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   284
        for variant in self._xml.getElementsByTagName('variant'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   285
            if variant.getAttribute('name').lower() == variant_name.lower():
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   286
                for xxx in variant.getElementsByTagName('file'):
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   287
                    return xxx.getAttribute('name')
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   288
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   289
    def xml(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   290
        """ Returning the XML as a string. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   291
        return self._xml.toprettyxml()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   292
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   293
    def save(self, filename = None):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   294
        """ Saving the XML into the provided filename. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   295
        if filename == None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   296
            filename = self._filename
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   297
        file_object = codecs.open(os.path.join(filename), 'w', "utf_8")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   298
        file_object.write(self.xml())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   299
        file_object.close()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   300
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   301
    @property
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   302
    def servicepacks(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   303
        """ Getting the service pack names. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   304
        result = []
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   305
        for spack in self._releaseInformation.getElementsByTagName('servicePack'):
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   306
            result.append(ServicePack(spack))
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   307
        return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   308
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   309
    filename = property(lambda self:self._filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   310
    service = property(lambda self:self.get_releasedetails_info('service'), lambda self, value:self.set_releasedetails_info('service', value))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   311
    product = property(lambda self:self.get_releasedetails_info('product'), lambda self, value:self.set_releasedetails_info('product', value))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   312
    release = property(lambda self:self.get_releasedetails_info('release'), lambda self, value:self.set_releasedetails_info('release', value))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   313
    dependsof_service = property(lambda self:self.get_releasedetails_info('service', 'dependsOf'), lambda self, value:self.set_releasedetails_info('service', value, 'dependsOf'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   314
    dependsof_product = property(lambda self:self.get_releasedetails_info('product', 'dependsOf'), lambda self, value:self.set_releasedetails_info('product', value, 'dependsOf'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   315
    dependsof_release = property(lambda self:self.get_releasedetails_info('release', 'dependsOf'), lambda self, value:self.set_releasedetails_info('release', value, 'dependsOf'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   316
    baseline_service = property(lambda self:self.get_releasedetails_info('service', 'previousBaseline'), lambda self, value:self.set_releasedetails_info('service', value, 'previousBaseline'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   317
    baseline_product = property(lambda self:self.get_releasedetails_info('product', 'previousBaseline'), lambda self, value:self.set_releasedetails_info('product', value, 'previousBaseline'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   318
    baseline_release = property(lambda self:self.get_releasedetails_info('release', 'previousBaseline'), lambda self, value:self.set_releasedetails_info('release', value, 'previousBaseline'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   319
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   320
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   321
class MD5Updater(ReleaseMetadata):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   322
    """ Update Metadata XML already created from SYMREC/SYMDEC. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   323
    def __init__(self, filename):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   324
        ReleaseMetadata.__init__(self, filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   325
        self._filepath = os.path.dirname(filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   326
                  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   327
    def update(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   328
        """ Update each existing package md5checksum and size attribute."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   329
        for name in self.keys():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   330
            fullname = os.path.join(self._filepath, name)                
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   331
            if os.path.exists(fullname):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   332
                LOGGER.info("Calculating the MD5 of " + fullname)
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   333
                result = self[name]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   334
                result['md5checksum'] = unicode(fileutils.getmd5(fullname))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   335
                result['size'] = unicode(os.path.getsize(fullname))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   336
                self[name] = result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   337
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   338
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   339
class ValidateReleaseMetadata(ReleaseMetadata):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   340
    """ This class validate if a metadata file is stored in the correct location and
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   341
        if all deps exists.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   342
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   343
    def __init__(self, filename):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   344
        ReleaseMetadata.__init__(self, filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   345
        self.location = os.path.dirname(filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   346
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   347
    def is_valid(self, checkmd5=True, checkPath=True):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   348
        """ Run the validation mechanism. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   349
        status = os.path.join(os.path.dirname(self._filename), 'HYDRASTATUS.xml')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   350
        if os.path.exists(status):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   351
            hydraxml = xml.dom.minidom.parse(open(status, "r"))
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   352
            for t_name in hydraxml.getElementsByTagName('state')[0].childNodes:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   353
                if t_name.nodeType == t_name.TEXT_NODE:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   354
                    if t_name.nodeValue != 'Ready':
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   355
                        LOGGER.error("HYDRASTATUS.xml is not ready")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   356
                        return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   357
        if checkPath:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   358
            if os.path.basename(self.location) != self.release:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   359
                LOGGER.error("Release doesn't match.")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   360
                return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   361
            if os.path.basename(os.path.dirname(self.location)) != self.product:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   362
                LOGGER.error("Product doesn't match.")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   363
                return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   364
            if os.path.basename(os.path.dirname(os.path.dirname(self.location))) != self.service:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   365
                LOGGER.error("Service doesn't match.")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   366
                return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   367
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   368
        for name in self.keys():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   369
            path = os.path.join(self.location, name)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   370
            if not os.path.exists(path):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   371
                LOGGER.error("%s doesn't exist." % path)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   372
                return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   373
            try:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   374
                LOGGER.debug("Trying to open %s" % path)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   375
                content_file = open(path)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   376
                content_file.read(1)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   377
            except IOError:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   378
                LOGGER.error("%s is not available yet" % path)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   379
                return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   380
                
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   381
            if checkmd5 and self[name].has_key('md5checksum'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   382
                if self[name]['md5checksum'] != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   383
                    if fileutils.getmd5(path).lower() != self[name]['md5checksum']:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   384
                        LOGGER.error("%s md5checksum missmatch." % path)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   385
                        return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   386
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   387
        for spack in self.servicepacks:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   388
            for name in spack.files:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   389
                path = os.path.join(self.location, name)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   390
                if not os.path.exists(path):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   391
                    LOGGER.error("%s doesn't exist." % path)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   392
                    return False
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   393
            for name in spack.instructions:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   394
                path = os.path.join(self.location, name)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   395
                if not os.path.exists(path):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   396
                    LOGGER.error("%s doesn't exist." % path)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   397
                    return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   398
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   399
        dependency = self.get_dependsof()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   400
        if dependency != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   401
            return ValidateReleaseMetadata(dependency.filename).is_valid(checkmd5)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   402
        return True
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   403
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   404
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   405
class MetadataMerger(object):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   406
    """ Merge packages definition to the root metadata. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   407
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   408
    def __init__(self, metadata):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   409
        """ Construct a metadata merger providing root metadata filename. """ 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   410
        self._metadata = ReleaseMetadata(metadata)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   411
                
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   412
    def merge(self, filename):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   413
        """ Merge the content of filename into the root metadata. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   414
        metadata = ReleaseMetadata(filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   415
        for name in metadata.keys():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   416
            if name in self._metadata.keys():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   417
                LOGGER.warning('Package %s already declared, overriding previous definition!' % name)        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   418
            self._metadata[name] = metadata[name]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   419
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   420
    def xml(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   421
        """ Returning the XML as a string. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   422
        return self._metadata.xml()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   423
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   424
    def save(self, filename = None):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   425
        """ Saving the XML into the provided filename. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   426
        return self._metadata.save(filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   427
 
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   428
 
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   429
class Metadata2TDD(ReleaseMetadata):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   430
    """ Convert Metadata to a TDD file """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   431
    def __init__(self, filename, includes=None, excludes=None):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   432
        ReleaseMetadata.__init__(self, filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   433
        if includes is None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   434
            includes = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   435
        if excludes is None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   436
            excludes = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   437
        self.location = os.path.dirname(filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   438
        self.includes = includes
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   439
        self.excludes = excludes
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   440
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   441
    def archives_to_tdd(self, metadata):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   442
        """archives"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   443
        tdd = "\t[\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   444
        for name in metadata.keys():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   445
            path_ = os.path.join(os.path.dirname(metadata.filename), name)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   446
            if (((len(self.includes) == 0) and metadata[name]['extract']) or (self.includes in metadata[name]['s60filter'])) and self.excludes not in metadata[name]['s60filter']:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   447
                tdd += "\t\t{\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   448
                tdd += "\t\t\t\"command\": \"unzip_%s\",\n" % metadata[name]['extract']
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   449
                tdd += "\t\t\t\"src\": \"%s\",\n" % os.path.normpath(path_).replace('\\', '/')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   450
                tdd += "\t\t},\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   451
        tdd += "\t],\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   452
        return tdd
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   453
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   454
    def to_tdd(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   455
        """ Generating a TDD file that contains a list of list of filenames. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   456
        tdd = "[\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   457
        # generates unarchiving steps for dependency
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   458
        dependency = self.get_dependsof()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   459
        if dependency != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   460
            tdd += self.archives_to_tdd(dependency)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   461
        # generates unarchiving steps
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   462
        tdd += self.archives_to_tdd(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   463
        tdd += "]\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   464
        return tdd
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   465
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   466
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   467
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   468
def find_latest_metadata(releasedir):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   469
    """ Finding the release latest release metadata file. """ 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   470
    try:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   471
        metadatas = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   472
        for filename in os.listdir(releasedir):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   473
            if re.match(r'^release_metadata(_\d+)?\.xml$', filename, re.I) is not None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   474
                LOGGER.debug("Found %s" % filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   475
                metadatas.append(filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   476
        # reverse the order...
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   477
        metadatas.sort(reverse=True)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   478
        if len(metadatas) > 0:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   479
            return os.path.normpath(os.path.join(releasedir, metadatas[0]))
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   480
    except (IOError, OSError), exc:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   481
        LOGGER.error(exc)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   482
        return None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   483
    return None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   484
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   485
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   486
class ValidateReleaseMetadataCached(ValidateReleaseMetadata):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   487
    """ Cached version of the metadata validation. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   488
    def __init__(self, filename, cachefile=None):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   489
        ValidateReleaseMetadata.__init__(self, filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   490
        self.__cachefile = cachefile
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   491
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   492
    def is_valid(self, checkmd5=True, checkPath=True):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   493
        """ Check if file is in the local cache.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   494
            Add valid release to the cache.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   495
        """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   496
        metadatas = self.load_cache()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   497
        if self.in_cache(metadatas, os.path.normpath(self._filename)):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   498
            LOGGER.debug("Release found in cache.")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   499
            return self.value_from_cache(metadatas, os.path.normpath(self._filename))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   500
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   501
            result = ValidateReleaseMetadata.is_valid(self, checkmd5, checkPath)        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   502
            LOGGER.debug("Updating the cache.")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   503
            metadatas.append([os.path.normpath(self._filename), result])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   504
            self.update_cache(metadatas)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   505
        return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   506
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   507
    def in_cache(self, metadatas, key):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   508
        """in cache"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   509
        for metadata in metadatas:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   510
            if metadata[0] == key:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   511
                return True 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   512
        return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   513
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   514
    def value_from_cache(self, metadatas, key):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   515
        """value from cache"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   516
        for metadata in metadatas:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   517
            if metadata[0] == key:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   518
                return metadata[1]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   519
        return None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   520
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   521
    def load_cache(self):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   522
        """load cache"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   523
        metadatas = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   524
        if self.__cachefile is not None and os.path.exists(self.__cachefile):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   525
            f_file = open(self.__cachefile, "rb")
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   526
            for row in csv.reader(f_file):
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   527
                if len(row) == 2:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   528
                    metadatas.append([os.path.normpath(row[0]), row[1].lower() == "true"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   529
                elif len(row) == 1:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   530
                    # backward compatibility with old cache.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   531
                    metadatas.append([os.path.normpath(row[0]), True])
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   532
            f_file.close()
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   533
        return metadatas
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   534
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   535
    def update_cache(self, metadatas):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   536
        """update cache"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   537
        if self.__cachefile is not None and os.path.exists(os.path.dirname(self.__cachefile)):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   538
            f_file = open(self.__cachefile, "wb")
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   539
            writer = csv.writer(f_file)
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   540
            writer.writerows(metadatas)
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   541
            f_file.close()
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   542
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   543
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   544
class ValidateTicklerReleaseMetadata(ValidateReleaseMetadataCached):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   545
    """ This class validate if a metadata file is stored in the correct location and
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   546
        if all deps exists.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   547
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   548
    def __init__(self, filename):
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   549
        ValidateReleaseMetadataCached.__init__(self, filename)
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   550
        self.location = os.path.dirname(filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   551
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   552
    def is_valid(self, checkmd5=True):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   553
        """ Run the validation mechanism. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   554
        tickler_path = os.path.join(self.location,"TICKLER")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   555
        if not os.path.exists(tickler_path):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   556
            LOGGER.error("Release not available yet")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   557
            return False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   558
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   559
            return ValidateReleaseMetadataCached.is_valid(self, checkmd5)