def __init__(self,
              num_processes=2,
              resource_lifespan=86400,
              job_lifespan=86400):
     self.allowed_extensions = {'csv'}
     self.resource_lifespan = resource_lifespan
     self.job_lifespan = job_lifespan
     self.num_processes = num_processes
     self.job_queue = None
     self.consumers = None
     self.manifest = Manifest()
Example #2
0
 def __init__(self, user, password, reader, writer, database):
     self.manifest = Manifest()
     self.builder = MysqlDB()
     self.user = user
     self.password = password
     self.reader = reader
     self.writer = writer
     self.database = database
Example #3
0
 def __init__(self, requestQueue):
     self.requestQueue = requestQueue
     self.serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     self.manifest = Manifest()
     self.bufferSize = self.manifest.listener_buffer_size
     self.portNumber = self.manifest.port_number
     self.serverIp = ''
     self.reqCount = 0
Example #4
0
class ManifestTests(unittest.TestCase):
    def setUp(self):
        self.manifest = Manifest('static_manifest.xml')
        f = open('static_manifest.xml')
        data = f.read()
        self.data = data

    def test_content(self):
        self.assertEqual(self.manifest.find_project(name='platform/build')\
            ['revision'], "81056a1c2bf8d42a9ca70eee90bb04e268dcddb1")

    def test_save(self):
        mf = 'test_manifest.xml'
        if os.path.exists(mf):
            os.remove(mf)
        self.manifest.save(mf)
        self.assertTrue(os.path.exists(mf))

    def test_from_dict(self):
        self.manifest.from_dict(self.manifest.M)
        self.test_content()
        self.test_save()

    def test_from_string(self):
        self.manifest.from_string(self.data)
        self.test_content()

    def test_constructor_with_data(self):
        self.manifest = Manifest(self.data)
        self.test_content
Example #5
0
def parse_pdf(path, pages=134):
    global LastBOL

    try:
        pdf_file = open(path, 'rb')

        #Create PDF Parser
        rsrcmanager = PDFResourceManager()
        PDFPageAgg = PDFPageAggregator(rsrcmanager, laparams=LAParams())
        interpreter = PDFPageInterpreter(rsrcmanager, PDFPageAgg)
        for n, page in enumerate(
                PDFPage.get_pages(pdf_file,
                                  maxpages=pages,
                                  password="",
                                  caching=True)):
            n += 1
            print('###### page ' + str(n))
            myTEUs = 0
            myWeight = 0
            interpreter.process_page(page)
            # receive the LTPage object for the page.
            LTPage_layout = PDFPageAgg.get_result()
            myBOL = get_BOL_from_elements(LTPage_layout)
            if not myBOL:
                print("Empty Page " + "\n")
                continue

            if LastBOL == myBOL:
                myTEUs, myWeight = get_TEUs_from_elements(LTPage_layout)
                if myTEUs == 0:
                    print("Continue same BOL: " + myBOL + "\n")
                    continue
                else:
                    myManifest.TEUs = myTEUs
                    myManifest.WeightORG_Tonne = myWeight

            else:
                myManifest = Manifest()
                myManifest.BOL = myBOL
                get_text_from_elements(LTPage_layout, myManifest)

            if myManifest.TEUs > 0:
                myManifest.SetCalculatedValues()
                myManifest.myPrint()
                Manifests.append(myManifest.get_list())
                print("-------------------------------------")
            else:
                print("Continue same BOL: " + myBOL + "\n")
            myTEUs = 0
            LastBOL = myBOL

        pdf_file.close()
        PDFPageAgg.close()
    except Exception:
        traceback.print_exc()
Example #6
0
 def __init__(self, requestQueue, gameQueue, gameCollection):
     self.manifest = Manifest()
     reader = self.manifest.database_reader
     writer = self.manifest.database_writer
     username = self.manifest.database_username
     password = self.manifest.database_password
     gameDatabase = self.manifest.game_database_name
     self.database = DB(username, password, reader, writer, gameDatabase)
     #self.database = DB('app','123','192.168.1.106', '192.168.1.106','gamedb')
     self.requestQueue = requestQueue
     self.gameQueue = gameQueue
     self.reqValidation = ValidateRequest()
     self.responder = Responder()
     self.gameCollection = gameCollection
     self.gameCollection.setDatabase(self.database)
     self.gameGenerator = GameGenerator(self.database, self.gameQueue,
                                        self.gameCollection)
Example #7
0
 def test_constructor_with_data(self):
     self.manifest = Manifest(self.data)
     self.test_content
Example #8
0
 def setUp(self):
     self.manifest = Manifest('static_manifest.xml')
     f = open('static_manifest.xml')
     data = f.read()
     self.data = data
Example #9
0
def main(argv = None):
  if argv is None:
    argv = sys.argv
  try:
    try:
      options, arguments = getopt.getopt(argv[1:], "i:z:l:S:r:R:cm:d:v:e:")

      caselist = Caselist()
      manifest = Manifest()
      keymap = Keymap()

      # logging
      log = logging.getLogger('process')
      log.setLevel(logging.INFO)
      log.addHandler(logging.StreamHandler())
	  
      # process options
      for option, argument in options:
        if option in ("-h", "--help"):
          print __doc__
          sys.exit(0)

        if option in ("-i", "--input"):
          if os.path.isfile(argument):
            caselist.loadCasesFromPaths(manifest.read(argument))
          elif os.path.isdir(argument):
            caselist.loadCasesFromDir(argument)
          else:
            print "Error: case files not loaded."
            sys.exit(0)

        if option in ("-z", "--config"):
          if os.path.isfile(argument):
            Config.load(argument)
          else:
            print "Error: config file not loaded."
            sys.exit(0)

        #### load ####

        if option in ("-l", "--load-keymap"):
          keymap.load(argument)

        #### search/replace ####

        if option in ("-S", "--search-by-key-value"):
          keyValuePair = argument.split(':')
          key = keyValuePair[0]
          value = keyValuePair[1]
          caselist.searchKeys(key, value)         

        if option in ("-r", "--substitute-key"):
          substituteKeys = argument.split(':')
          caselist.substituteKey(substituteKeys[0], substituteKeys[1])

        if option in ("-R", "--subsitute-keys-from-file"):
          caselist.substituteKeysFromFile(argument)

        #### dump ####

        if option in ("-c", "--dump-cases"):
          caselist.dumpCases()

        if option in ("-m", "--dump-keys-by-keymap"):
          caselist.dumpGroupedKeys(keymap, argument)

        if option in ("-d", "--dump-stata"):
          caselist.dumpStataFiles(argument)

        if option in ("-v", "--dump-stata-commands"):
          keymap.dumpStataCommands(argument, caselist)

        if option in ("-e", "--dump-excel-data"):
          keymap.dumpExcelData(argument, caselist)

        #### etc ####

        # caselist.explore()
		
    except getopt.error, message:
       raise Usage(message)

  except Usage, error:
    print >>sys.stderr, error.message
    print >>sys.stderr, "for help use --help"
    return 2
class ResourceManager:
    def __init__(self,
                 num_processes=2,
                 resource_lifespan=86400,
                 job_lifespan=86400):
        self.allowed_extensions = {'csv'}
        self.resource_lifespan = resource_lifespan
        self.job_lifespan = job_lifespan
        self.num_processes = num_processes
        self.job_queue = None
        self.consumers = None
        self.manifest = Manifest()

    def start(self):
        if not os.path.exists('resources/'):
            os.mkdir('resources/')
        if not os.path.exists('jobs/'):
            os.mkdir('jobs/')
        self.job_queue = JoinableQueue()
        self.consumers = [
            Consumer(self.job_queue, self.manifest)
            for _ in range(self.num_processes)
        ]
        for consumer in self.consumers:
            consumer.start()

    def shutdown(self):
        for consumer in self.consumers:
            consumer.terminate()
        self._remove_all()

    def get_job_status(self, job_id):
        return self.manifest.get_job_status(job_id)

    def add_job_to_queue(self, job):
        self.manifest.add_job(job.job_id)
        self.job_queue.put(job)

    def delete_job_results(self, job_id):
        self.manifest.delete_job(job_id)
        path = 'jobs/' + job_id
        if os.path.exists(path):
            try:
                shutil.rmtree(path)
                return True
            except BaseException:
                return False
        return False

    def delete_expired_resources(self):
        expired_resources = self.manifest.delete_expired_resources(
            self.resource_lifespan)
        for resource_id in expired_resources:
            try:
                shutil.rmtree('resources/' + resource_id)
            except:
                pass

    def delete_expired_jobs(self):
        expired_jobs = self.manifest.delete_expired_jobs(self.job_lifespan)
        for job_id in expired_jobs:
            try:
                shutil.rmtree('jobs/' + job_id)
            except:
                pass

    @staticmethod
    def get_zip_filename(job_id):
        folder = 'jobs/' + job_id + '/'
        if not os.path.exists(folder):
            return None

        zip_filename = folder + job_id + '.zip'
        zip = zipfile.ZipFile(zip_filename, 'w')
        for file in os.listdir(folder):
            if not file.endswith('.zip'):
                zip.write(folder + file)
        return zip_filename

    @staticmethod
    def get_aggregated_data(job_id):
        filename = 'jobs/' + job_id + '/aggregate.json'
        if not os.path.exists(filename):
            return None
        with open(filename) as file:
            return json.load(file)

    @staticmethod
    def job_id_is_safe(job_id):
        return '/' not in job_id and '.' not in job_id

    @staticmethod
    def get_new_resource_id():
        return uuid.uuid4().hex

    @staticmethod
    def get_resource_hash(resource_id):
        filename = 'resources/' + resource_id
        if not os.path.exists(filename):
            return None
        block_size = 1024
        m = hashlib.sha256()
        with open(filename, "rb") as file:
            byte = file.read(block_size)
            while byte != b"":
                m.update(byte)
                byte = file.read(block_size)

        return m.hexdigest()

    def add_resource(self, resource_id):
        resource_hash = self.get_resource_hash(resource_id)
        self.manifest.add_resource(resource_id, resource_hash)

    def delete_resource(self, resource_id):
        self.manifest.delete_resource(resource_id)
        filepath = 'resources/' + resource_id
        if not os.path.exists(filepath):
            return False
        os.remove(filepath)
        return True

    def extension_is_allowed(self, filename):
        if '.' not in filename:
            return False
        extension = filename.split('.')[1]
        return extension in self.allowed_extensions

    def resource_id_exists(self, resource_id):
        return self.manifest.resource_exists(resource_id)

    def resource_hash_exists(self, resource_hash):
        return self.manifest.resource_hash_exists(resource_hash)

    def _remove_all(self):
        self.manifest.clear()
        shutil.rmtree('resources/')
        shutil.rmtree('jobs/')
        if os.path.exists('data/'):
            if os.path.exists('data/osm_query_cache'):
                shutil.rmtree('data/osm_query_cache')