Пример #1
0
  def detect( cls, target_file, magic_helper, requested_type=None ):  # compare with packrat-agent/packratAgent/JsonManager.py -> _splitFileName
    filename = os.path.basename( target_file.name )

    parts = filename.split( '.' )

    if len( parts ) > 1 and parts[ -2 ] in COMPRESED_TYPE_LIST:  # to deal with things like '.tar.??', 'img.??'
      ( filename, _, _ ) = filename.rsplit( '.', 2 )
      type = parts[ -2 ]

    else:
      ( filename, _ ) = filename.rsplit( '.', 1 )
      type = parts[ -1 ]

    try:
      ( package, version ) = filename.split( '_' )
    except ValueError:
      return None

    type = type.lower()

    if requested_type is not None:
      if not name_regex.match( requested_type ):
        raise ValueError( 'Invalid type' )

      type = requested_type

    elif type not in OTHER_TYPE_LIST:
      type = 'resource'

    return cls( filename, package, 'all', version, type )
Пример #2
0
  def loadfile( self, target_file, distroversion, type ):
    if type is not None and not name_regex.match( type ):
      raise PackageException( 'INVALID_TYPE', 'Invalid type' )

    info = infoDetect( target_file, type )

    if info is None:
      raise PackageException( 'UNKNOWN_TYPE', 'Unable to Determine File Type' )

    try:
      package = Package.objects.get( pk=info.package )
    except Package.DoesNotExist:
      raise PackageException( 'NO_PACKAGE', 'Unable to find package "{0}"'.format( info.package ) )

    if distroversion not in info.distroversion_list:
      raise PackageException( 'INVALID_DISTROVERSION', 'DistroVersion "{0}" is not an option for this file'.format( distroversion ) )

    target_file.file.seek( 0 )
    sha256 = hashlib.sha256()
    while True:
      buf = target_file.file.read( 4096 )
      if not buf:
        break

      sha256.update( buf )

    self.file = target_file
    self.distroversion_id = distroversion
    self.package = package
    self.type = info.type
    self.arch = info.arch
    self.version = info.version
    self.sha256 = sha256.hexdigest()
Пример #3
0
    def clean(self, *args, **kwargs):
        super().clean(*args, **kwargs)
        errors = {}

        if not name_regex.match(self.name):
            errors['name'] = 'Invalid'

        if errors:
            raise ValidationError(errors)
Пример #4
0
    def clean(self, *args, **kwargs):
        super().clean(*args, **kwargs)
        errors = {}

        todo = [self]
        visited = []
        while todo:
            current = todo.pop(0)
            if current in visited:
                continue

            visited.append(current)
            todo += current.required_list.all()
            if self in todo:
                errors[
                    'required'] = 'required tags recursivly refer back to this tag'
                break

        if not name_regex.match(self.name):
            errors['name'] = 'Invalid'

        if errors:
            raise ValidationError(errors)