inbinder
inbinder

Reputation: 722

Problems with methods calling methods in a class

Why aren't these methods working as I expect? I can get a line to print right after the method, however, none of the other functionality seems to work.

I'm trying to

  1. assign a directory
  2. iterate over files using glob
  3. assign a file handler to each file found in the directory
  4. use the method summary which then calls a series of other methods that call each other.
  5. Sorting and parsing the file
  6. Printing the results of the sorting and parsing.

Code:

#! /usr/bin/env python3
#This utility attempts to parse the output text files generated by dcp_inspect
#for faster inspection and when attending to multiple DCP inspections.
#dcp_inspect_parse runs on Python3.x 
import logging
import os
import re
import sys

from glob import glob

logging.basicConfig(level=logging.DEBUG)

class DcpParser:
    """Parses DCP Inspector output files, and writes summary files to a
    directory whose path is supplied at construction."""



    def parse(self, dir):
        """Parses all files in the current directory."""
        cpl                  = []
        content              = []
        contentkind          = []
        container            = []
        errors               = [] 
        package              = []
        summary              = []
        mainsound            = []
        mainpicture          = []
        encryption           = []
        duration             = []
        fsp                  = []
        dimensiontype        = []
        aspect               = []
        filesize             = [2]
        audio                = []
        cpltype              = []
        os.chdir(dir)
        files = glob('*')
        logging.debug("Found files: %s", files)
        for file in files:
            try:
                with open(file) as data:
                    logging.debug("Opening file: %s", data)
                    print("Scanning...\t\t\t", file)
                    for each_line in data:
                        #self.prints()
                        self.file_summary()
                        #self.audio()

            except:
                pass



    def prints(self):

            print('Container:             \t\t',container.strip())        
            print('CPL Type:              \t\t',cpltype)
            print('Duration:              \t\t',duration.strip(','))
            print('Frame Rate:            \t\t',fps)
            print('Aspect Ratio:          \t\t',aspect.strip(','))
            print('Dimension:             \t\t',dimensiontype.strip(',')) 
            print('Content Title:         \t\t',content.strip(',').strip('""'))
            print('Audio for DCP:         \t\t', audio)
            print('Package size:          \t\t',filesize)
            print('Encryption status:     \t\t',encryption.upper().strip())       
            print('CPL ID:                \t\t', cpl[2])  
            print('Content Kind:          \t\t',contentkind.upper()) 
            print('\n')
            print('There are',errors[1],'Errors and',errors[3],'hints for', content.strip(','))
            if errors[1] != '0':
                print('could be issues\n')
            else:
                print('This DCP appears to be OK\n')       


    def file_summary(self):
        print('made it to summary')
        self.file_audio()
        for each_line in data:
            if 'summary'in each_line:
                summary.extend(each_line.split())
                print(summary.extend(each_line.split()))
                for x in range(len(summary)):
                    if 'fps' in summary[x]:
                        fps = summary[(x-1)]
                        duration = summary[(x-2)].strip()

                    elif 'summary:' in summary[x]:
                        content = summary[(x+1)]
                        content.strip(',')

                    elif '2D' in summary[x]:
                        dimensiontype = summary[(x)]
                        aspect = summary[(x+1)].strip(',')

                    elif '3D' in summary[x]:
                        dimensiontype = summary[(x)]
                        aspect = summary[(x+1)]

            elif 'Errors' in each_line:
                errors=(each_line.split())
            elif 'Package with total size'in each_line:
                if 'Bytes 0' in each_line:
                    pass
                else:
                    temp =[]
                    temp.extend(each_line.split())
                    filesize=(temp.pop()+' '+temp.pop())


    def file_audio(self):
         print('made it to audio')
         self.file_picture()
         for each_line in data:

             if 'MainSound'in each_line:

                if 'audio' in each_line:
                    m = re.search('([0-9]+)bps', each_line)
                    if m is None:
                        bps = 'bps error'
                    else:
                        bps = int(m.group(1))

                    m = re.search('([0-9]+)ch', each_line)
                    if m is None:
                        channels = 'channel error'
                    else:
                        channels = int(m.group(1))

                    m = re.search('([0-9]+)kHz', each_line)
                    if m is None:
                        bandwidth = 'bandwidth error'
                    else:
                        bandwidth = int(m.group(1))

                    audio = '%ich %ikHz %ibps' % (channels, bandwidth, bps)


    def file_picture(self):
        print('made it to picture')
        for each_line in data:

            if 'MainPicture'in each_line:
               if 'pictures' in each_line:
                   temp = []
                   temp.extend(each_line.split(','))
                   container = temp[-2]
                   encryption= temp[-3]




    def file_cplId(self):
        print('cpl id')
        if 'CPL Id:'in each_line:
            cpl=(each_line.split())


    def file_cplType(self):
        if 'CPL type: 'in each_line:
            cpltype=(each_line.split())
            cpltype = cpltype[2]

    def file_contentKind(self):
        if 'ContentKind: 'in each_line:
            contentkind=(each_line.split())
            contentkind = contentkind[1]

    def file_contentTitleText(self):
        if 'ContentTitleText:'in each_line:
            content=(each_line.split(':'))
            content = content[1]










if __name__ == '__main__':
    print("Input directory name: " + os.getcwd())
    default_dir = os.getenv('HOME') + '/Desktop/dcp_output'
    prompt = "Please enter the output directory name [" + default_dir + "]: "
    dir = input(prompt) or default_dir
    print("Output directory name: " + dir)

    parser = DcpParser()

    parser.parse(dir )

Upvotes: 0

Views: 68

Answers (1)

user3072164
user3072164

Reputation:

It seems strange to me that none of your variables start with self. which means that you do not have any class members, all variables are local in the respective method.

Also conveniently you used try except pass around the main portion of your code which will ignore any error happening. One of these errors would be that you access data in several methods which is neither a global variable nor assigned to previously in the method.

Remove try except pass for debug purposes and report what happens.

Upvotes: 2

Related Questions