예제 #1
0
    def __init__(self, metainfo, all_maintainers):
        """
            Constructor of the Product object
            
            Args:
                metainfo:     (dict) dictonary describing a product
                all_maintainers: (dict of dict)  all possible maintainers, where the main key
                              is a username/unique pseudo, and the key is a dictionary of name,
                              email address. For example:
                                {
                                    'username01': { 'name': 'Paul Developer', 'email': '*****@*****.**' },
                                    'username02': { 'name': 'Marc Developer2', 'email': '*****@*****.**' }
                                }
                              would work. 
                                
        """
        
        self.parent = None
        # if there is a group, the product is the group
        # else the product is directly the library
            
        if 'group_info' in metainfo:
            self.name = utils.serialize_name(metainfo['group_info'].get('name', metainfo.get('group')))
            self.fancyname = metainfo['group_info'].get('fancyname', string.capwords(self.name))
            self.description = metainfo['group_info'].get('description')
            self.long_description = metainfo['group_info'].get('long_description', [])
            self.maintainers = utils.set_maintainers(metainfo['group_info'].get('maintainer'),
                                                     all_maintainers)
            self.platforms = metainfo['group_info'].get('platforms')
            self.outputdir = self.name
            self.href = self.outputdir + '/index.html'
            self.logo_url_src = self._set_logo_src(metainfo['path'],
                                                   metainfo['group_info'])
            self.logo_url = self._set_logo()
            self.libraries = []  # We'll set this later
            self.subgroups = []  # We'll set this later
            self.irc = metainfo['group_info'].get('irc', 'kde-devel')
            self.mailinglist = metainfo['group_info'].get('mailinglist', 'kde-devel')
            self.subproducts = self._extract_subproducts(metainfo['group_info'])
            self.part_of_group = True

        elif 'group' not in metainfo:
            self.name = utils.serialize_name(metainfo['name'])
            self.fancyname = metainfo['fancyname']
            self.description = metainfo.get('description')
            self.maintainers = utils.set_maintainers(metainfo.get('maintainer'), all_maintainers)
            self.platforms = [x['name'] for x in metainfo.get('platforms', [{'name': None}])]
            self.outputdir = self.name
            self.href = self.outputdir + '/html/index.html'
            self.logo_url_src = self._set_logo_src(metainfo['path'], metainfo)
            self.logo_url = self._set_logo()
            self.libraries = []
            self.irc = None
            self.mailinglist = None
            self.part_of_group = False
        else:
            raise ValueError("I do not recognize a product in {}."
                             .format(metainfo['name']))
예제 #2
0
 def __init__(self, spinfo, product):
     """
         Constructor of the Subproduct object
         
         Args:
             spinfo:       (dict) description of the subproduct. It is not more than:
             {
                 'name': 'Subproduct Name',
                 'description': 'This subproduct does this and that',
                 'order': 3, # this is optional
             }
             for example.
             product:      (Product) the product it is part of.
     """
     self.fancyname = spinfo['name']
     self.name = utils.serialize_name(spinfo['name'])
     self.description = spinfo.get('description')
     self.order = spinfo.get('order', 99)  # If no order, go to end
     self.libraries = []
     self.product = product
     self.parent = product
예제 #3
0
    def __init__(self, metainfo, products, platforms, all_maintainers):
        """
            Constructor of the Library object
            
            Args:
                metainfo:     (dict) dictionary describing a library
                products:     (list of Products) list of all already created products
                platforms:    (dict) dictionary of all platforms for which the library
                              is available, where the key is a platform and the value
                              is a restriction. For instance:  
                                { 
                                    'Linux': '', 
                                    'Windows': 'Tested with Windows 10 only'
                                }
                              would work.
                all_maintainers: (dict of dict)  all possible maintainers, where the main key
                              is a username/unique pseudo, and the key is a dictionary of name,
                              email address. For example:
                                {
                                    'username01': { 'name': 'Paul Developer', 'email': '*****@*****.**' },
                                    'username02': { 'name': 'Marc Developer2', 'email': '*****@*****.**' }
                                }
                              would work. 
                                
        """
        self.product = None
        self.subproduct = None

        if 'group' in metainfo:
            productname = metainfo['group']
            self.part_of_group = True
        else:
            productname = metainfo['name']
            self.part_of_group = False
        if utils.serialize_name(productname) not in products:
            productname = metainfo['name']
            del metainfo['group']
            products[utils.serialize_name(metainfo['name'])] = Product(
                metainfo, all_maintainers)
            self.part_of_group = False
            logging.warning("Group of {} not found: dropped.".format(
                metainfo['fancyname']))
        self.product = products[utils.serialize_name(productname)]
        if self.product is None:
            raise ValueError("'{}' does not belong to a product.".format(
                metainfo['name']))

        if 'subgroup' in metainfo and self.part_of_group:
            for sp in self.product.subproducts:
                if sp.name == utils.serialize_name(metainfo['subgroup']):
                    self.subproduct = sp
            if self.subproduct is None:
                logging.warning(
                    "Subgroup {} of library {} not documented, subgroup will be None"
                    .format(metainfo['subgroup'], metainfo['name']))

        if self.subproduct is not None:
            self.parent = self.subproduct
            self.subproduct.libraries.append(self)
        else:
            self.parent = self.product
        self.product.libraries.append(self)

        self.name = metainfo['name']
        self.fancyname = metainfo['fancyname']
        self.description = metainfo.get('description')
        self.maintainers = utils.set_maintainers(metainfo.get('maintainer'),
                                                 all_maintainers)
        self.platforms = platforms
        self.outputdir = self._set_outputdir(self.part_of_group)
        self.href = '../' + self.outputdir.lower() + '/html/index.html'
        self.path = metainfo['path']
        self.srcdirs = utils.tolist(metainfo.get('public_source_dirs',
                                                 ['src']))
        self.docdir = utils.tolist(metainfo.get('public_doc_dir', ['docs']))
        self.exampledir = utils.tolist(
            metainfo.get('public_example_dir', ['examples']))
        self.dependency_diagram = None
        self.type = metainfo.get('type', '')
        self.portingAid = metainfo.get('portingAid', False)
        self.deprecated = metainfo.get('deprecated', False)
        self.libraries = metainfo.get('libraries', [])
        self.cmakename = metainfo.get('cmakename', '')
        self.irc = metainfo.get('irc', self.product.irc)
        self.mailinglist = metainfo.get('mailinglist',
                                        self.product.mailinglist)