19 de enero de 2013

Python Script: QosCalc.py

Feliz año, merry christmas y esas cosas que se dicen... Ya se que es un poco tarde pero es mi primera entrada del año y tenía que decirlo en algún momento. Tengo varias entradas entre manos y algunas de ellas dedicadas a scripts Python que estoy realizando.

En esta entrada voy a mostrar la actualización que he realizado del script TosCalc.py, descrito en esta entrada. En primer lugar le he cambiado el nombre porque el anterior no me convencía, he utilizado la variable self para almacenar todos los valores que se van calculando y un pequeño control de excepciones que controla los errores el script.

El script acepta solamente un argumento y éste debe ser un número entero (de tipo int), en caso de no pasar un número fallará salvo algunas excepciones siempre y cuando los valores estén comprendidos entre el 1 y el 7.


Sintaxis: ./QosCalc.py value

Código fuente:
#!/usr/bin/env python
#
# Name: QoSCalc.py
# Description: Calculate any QoS values through a IP Precedence or Class Selector
# Author: Brixton Cat
# Date: 19 Ene 2013
# Version: 1.0
# Sintax: ./QoSCalc.py value
#
 
### Dependencies
import sys
 
### tosCalc class
class qosCalc:
  """ Class to calc any QoS values through a IP Precedence or
      Class Selector """
  
  def __init__(self, value):
    """ Initializing qosCalc class """
    self.value = value                            # Creating value variable
    
    # Check value introduced
    if value < 1 or value > 7:
      print "[!] Error: Allow values it's from 1 to 7"
      sys.exit(3)                                 # Exit code: 3

  def eightBits(self):
    """ This function add 0s to right side of binary variable and calc their
        decimal value """

    self.tosb = self.dscpb + str(0) * 2           # Type of Service binary value
    self.tosd = int(self.tosb, 2)                 # Type of Service decimal value

  def main(self):
    """ Main function """
    
    calc.threeBits()
    calc.sixBits()
    calc.eightBits()

  def results(self):
    """ Prints values of the IP Precedence or Class Selectors argument """
  
    # Header of table
    print "Value  3bits   DSCP Bin  DSCP   ToS Bin   ToS"
    print "-----  -----   --------  ----   -------   ---"
    # Values
    print "  %d\t%s\t%s\t  %d\t%s  %d" % \
      (self.value, self.binary, self.dscpb, self.dscpd, self.tosb, self.tosd)

    return sys.exit(0)

  def sixBits(self):
    """ This function add 0s to right side of binary variable and calculate
        their decimal value """
  
      self.dscpb = self.binary + str(0) * 3       # DSCP binary value
      self.dscpd = int(self.dscpb, 2)             # DSCP decimal value

  def threeBits(self):
    """ This function convert decimal argument to 3 bits value and check
        correct lenght of this """

    # If less of 3 bits, add 0s to left of binary variable
    bina = bin(self.value).split('b')             # Array ['0', 'value']
    if bina[1] < "3":
        rest = 3 - len(bina[1])
        self.binary = str(0) * rest + bina[1]
    else:
        self.binary = bina[1]

### Script
if __name__ == "__main__":
  try:
    value = int(sys.argv[1])                      # Check first argument
    
    calc = qosCalc(value)                         # Initializing qosCalc class
    calc.main()                                   # Run main() function
    calc.results()                                # Prints results
    
  except IndexError:                              # Error: No argument
    print "[!] Error: Any value defined"
    sys.exit(1)                                   # Exit code: 1
    
  except ValueError:                              # Error: Bad arguments
    print "[!] Error: Not valid Class Selector or IP Precedence value"
    sys.exit(2)                                   # Exit code: 2

#EOF
##FVE

Un saludo, Brixton Cat

No hay comentarios:

Publicar un comentario

Bienvenid= si quieres dejar un comentario