Source code for cpe.comp.cpecomp2_2

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
This file is part of cpe package.

This module allows to store the value of the components of a CPE name
of version 2.2 of CPE (Common Platform Enumeration) specification.

Copyright (C) 2013  Alejandro Galindo García, Roberto Abdelkader Martínez Pérez

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

For any problems using the cpe package, or general questions and
feedback about it, please contact:

- Alejandro Galindo García: galindo.garcia.alejandro@gmail.com
- Roberto Abdelkader Martínez Pérez: robertomartinezp@gmail.com
"""

from cpecomp_simple import CPEComponentSimple

import re


[docs]class CPEComponent2_2(CPEComponentSimple): """ Represents a component of version 2.2 of CPE specification. TEST: simple value >>> value = "microsoft" >>> comp = CPEComponent2_2(value, CPEComponentSimple.ATT_VENDOR) """ ############### # CONSTANTS # ############### #: Pattern used to check the value of component _VALUE_PATTERN = "^([\d\w\._\-~%]+)$" #: Separator of components of CPE name with URI style SEPARATOR_COMP = ":" #: Characters of version 2.2 of CPE name to convert #: to standard value (WFN value) NON_STANDARD_VALUES = [".", "-", "~", "%"] # Logical values in string format #: Logical value associated with a undefined component of CPE Name VALUE_UNDEFINED = None #: Logical value associated with a component without value set VALUE_EMPTY = "" ############### # VARIABLES # ############### #: Compilation of pattern used to check the value of component _value_rxc = re.compile(_VALUE_PATTERN) #################### # OBJECT METHODS # ####################
[docs] def __repr__(self): """ Returns a unambiguous representation of CPE component. :returns: Representation of CPE component as string :rtype: string """ return "{0}({1})".format(self.__class__.__name__, self.get_value())
def _decode(self): """ Convert the encoded value of component to standard value (WFN value). """ result = [] idx = 0 s = self._encoded_value while (idx < len(s)): # Get the idx'th character of s c = s[idx] if (c in CPEComponent2_2.NON_STANDARD_VALUES): # Escape character result.append("\\") result.append(c) else: # Do nothing result.append(c) idx += 1 self._standard_value = "".join(result) def _is_valid_value(self): """ Return True if the value of component in generic attribute is valid, and otherwise False. :returns: True if value is valid, False otherwise :rtype: boolean """ comp_str = self._encoded_value return CPEComponent2_2._value_rxc.match(comp_str) is not None
if __name__ == "__main__": import doctest doctest.testmod() doctest.testfile("../tests/testfile_cpecomp2_2.txt")