예제 #1
0
 def base_font(self):
   output = self.folder + '/base'
   baseFonter = BaseFonter(self.fontfile)
   baseFonter.base(output)
   compressor = Compressor(Compressor.LZMA_CMD)
   compressor.compress(output, output + '.xz')
   compressor = Compressor(Compressor.GZIP_CMD)
   compressor.compress(output, output + '.gz')
예제 #2
0
    async def get_compiled_file(self, session: aiohttp.ClientSession,
                                target: BuildTarget, lock: asyncio.Lock,
                                compressor: Compressor):
        print(f"Waiting for a compiled file from {self.address}")
        async with lock:
            data = aiohttp.FormData()
            archive_file = tempfile.NamedTemporaryFile(suffix='tar.xz')
            commands_file = tempfile.NamedTemporaryFile(suffix='.sh')
            target.substitute_for_absolute_paths('/')
            data.add_field('workdir', os.getcwd())
            data.add_field('targets', ', '.join(target.target_files))
            data.add_field('commands_file', commands_file.name)
            data.add_field('password', self.password)
            data.add_field('exact_lib_versions',
                           'true' if config.EXACT_LIB_VERSIONS else 'false')

        if self.libraries is None:
            self.libraries = []
            response = await session.post(url=self.address +
                                          self.ALL_LIBRARIES_ENDPOINT)
            libraries = (await response.json())
            for library in libraries:
                try:
                    self.libraries.append(Library(library))
                except:
                    continue

        present_libraries = await self.get_present_libraries(target)
        async with lock:
            for library in present_libraries:
                await target.replace_in_commands(
                    library, f'${{{library.split("/")[-1]}}}')
            await target.create_commands_file(commands_file.name)

            compressor.compress([
                file for file in target.all_dependency_files
                if file not in present_libraries
            ] + [commands_file.name], archive_file.name)
            data.add_field('file',
                           open(archive_file.name, 'rb'),
                           filename=archive_file.name.split('/')[-1])
            archive_file.close()
            commands_file.close()

        # Lock is released
        result = await self.get_archive(data, session)
        async with lock:
            await Compressor.extract_files(result)
예제 #3
0
def build():
    logger = logging.create_logger(app)
    print(request.form)
    password = request.form['password']
    if not is_password_acceptable(password):
        return make_response('', 400)
    # Extracting files
    tempdir = tempfile.TemporaryDirectory()
    print(request.files)

    f = request.files['file']
    commands_file = request.form['commands_file'].strip('/')

    archive_file = tempfile.NamedTemporaryFile(suffix='.tar.xz', dir=tempdir.name)
    archive_filename = archive_file.name.split('/')[-1]
    print(archive_filename)

    f.save(archive_file.name)

    compressor = Compressor(tempdir.name)
    compressor.extract_files(archive_filename)
    new_root = f'{tempdir.name}/{archive_filename.split(".")[0]}/'

    archive_file.close()

    # Run commands
    print(new_root)

    command_runner = CommandRunner(new_root + request.form['workdir'].strip('/'), app.config['LIBRARIES'])

    output, code = command_runner.run_commands(new_root + commands_file, new_root, logger, request.form['exact_lib_versions'] == 'true')
    if code != 0:
        logger.debug(code)
        response = output, 400
    else:
        # Sending files back
        target_files = [target.strip('/') for target in request.form['targets'].split(', ')]
        compressor.root_path = new_root
        output_file = tempfile.NamedTemporaryFile(suffix='.tar.xz')
        compressor.compress(target_files, output_file.name)
        response = send_file(output_file, mimetype='application/x-object')

    tempdir.cleanup()

    return response
예제 #4
0
def dump_tables(fontfile, output):
    font = TTFont(fontfile, lazy=True)
    dump_folder = output + '_tables'
    print('dump results in {0}'.format(dump_folder))
    try:
        os.makedirs(dump_folder)
    except OSError as exception:
        if exception.errno != errno.EEXIST:
            raise

    header_dict = FontInfo.getInformation(fontfile, FontInfo.TAGS.keys())
    bin_header = BaseHeaderPrepare.prepare(BaseFonter.BASE_VERSION,
                                           header_dict)
    print('Base header total size=', len(bin_header))

    base_fonter = BaseFonter(fontfile)
    base_dump = dump_folder + '/base_dump'
    base_fonter.dump_base(base_dump)
    # OpenType tables.
    dump_file = open(base_dump, 'r+b')
    tables = font.reader.tables
    for name in font.reader.tables:
        table = tables[name]
        offset = table.offset
        length = table.length
        #print('{0}: offset={1}, length={2}'.format(name, offset, length))
        table_file_name = dump_folder + '/' + name.replace('/', '_')
        table_file = open(table_file_name, 'w+b')
        dump_file.seek(offset)
        table_file.write(dump_file.read(length))
        table_file.close()
        rle_table = RleFont(table_file_name)
        rle_table.encode()
        rle_table.write(table_file_name)
        compressor = Compressor(Compressor.GZIP_INPLACE_CMD)
        compressor.compress(table_file_name)
        print('{0}: offset={1:9d}\tlen={2:9d}\tcmp_len={3:9d}'.format(
            name, offset, length, os.path.getsize(table_file_name + '.gz')))

    print('TODO(bstell) save and compress the CFF parts.')
    if 'CFF ' in font:
        dumpCFFTable(font)

    font.close()
예제 #5
0
def dump_tables(fontfile, output):
  font = TTFont(fontfile,lazy=True)
  dump_folder = output + '_tables'
  print('dump results in {0}'.format(dump_folder))
  try:
    os.makedirs(dump_folder)
  except OSError as exception:
    if exception.errno != errno.EEXIST:
      raise

  header_dict = FontInfo.getInformation(fontfile, FontInfo.TAGS.keys())
  bin_header = BaseHeaderPrepare.prepare(BaseFonter.BASE_VERSION, header_dict)
  print('Base header total size=',len(bin_header))

  base_fonter = BaseFonter(fontfile)
  base_dump =  dump_folder + '/base_dump'
  base_fonter.dump_base(base_dump)
  # OpenType tables.
  dump_file = open(base_dump,'r+b')
  tables = font.reader.tables
  for name in font.reader.tables:
    table = tables[name]
    offset = table.offset
    length = table.length
    #print('{0}: offset={1}, length={2}'.format(name, offset, length))
    table_file_name = dump_folder + '/' + name.replace('/', '_')
    table_file = open(table_file_name,'w+b')
    dump_file.seek(offset);
    table_file.write(dump_file.read(length))
    table_file.close()
    rle_table = RleFont(table_file_name)
    rle_table.encode()
    rle_table.write(table_file_name)
    compressor = Compressor(Compressor.GZIP_INPLACE_CMD)
    compressor.compress(table_file_name)
    print('{0}: offset={1:9d}\tlen={2:9d}\tcmp_len={3:9d}'.format(name, offset, length,os.path.getsize(table_file_name+'.gz')))

  print('TODO(bstell) save and compress the CFF parts.')
  if 'CFF ' in font:
    dumpCFFTable(font)

  font.close()
예제 #6
0
class CAES:
    def __init__(self,V=1000.,cmp_eff=80.,trb_eff=90.,p=200000):

        # Air Side
        self.amb = Ambient()
        self.cmp = Compressor(eff=cmp_eff)
        self.tank = Tank(V=V,p=p)
        self.trb = Turbine(eff=trb_eff)
        self.m_dot_i = 0.0
        self.m_dot_o = 0.0

        # Heat Side

        # Create pandas DataFrame to store results
        self.df = pd.DataFrame(columns=variables)

    def update(self, pwr, dt):
        # Charge
        if pwr>0.0:
            self.charge(pwr, dt)
        # Discharge
        elif pwr > 0.0:
            self.discharge(pwr, dt)
        # Do nothing
        else:
            self.maintain(dt)

        

    def charge(self, pwr, dt):
        # Do something
        state1 = self.amb.state
        p_tank = self.tank.state.p
        state2 = self.cmp.compress(state1, p_tank,pwr)
        m_dot_i = self.cmp.m_dot
        state3 = state2 # Hxer - to be added
        self.tank.charge(state3,m_dot_i,dt)
        self.m_dot_i = m_dot_i


    def discharge(self, pwr, dt):
        state4 = self.tank.state
        state5 = state4 # Hxer - to be added
        p_amb = self.amb.state.p
        state6 = self.trb.expand(state4, p_amb)
        m_dot = pwr / (state4.h - state5.h)
        self.tank.discharge(state4, m_dot, dt)

    def maintain(self, dt):
        # Turn Everything off

	def saveState(self, pwr, dt):
        
		#-----
		# Prepare series to store current state
		#-----
        s = pd.Series(index=variables)
        
		#-----
		# System Level
		#-----
		s['dt'] = dt
		s['pwr'] = pwr

		#-----
		# Fluid
		#-----
			# Tanks
		s['fluid_TA'] = 0.0
        s['fluid_TC'] = 0.0
        s['fluid_TH'] = 0.0
			# Flow paths
		s['fluid_A'] = self.cmp.m_dot
        s['fluid_B'] = 0.0
        s['fluid_C'] = 0.0
        s['fluid_D'] = 0.0
        s['fluid_E'] = 0.0	
		#-----
		# Mass stored (Tanks only)
		#-----
        s['m_TA'] = self.tank.m
        s['m_TC'] = 0.0
        s['m_TH'] = 0.0
		#-----
		# Mass flow rate (Flow paths only)
		#-----
        s['m_dot_A'] = self.cmp.m_dot
        s['m_dot_B'] = 0.0
        s['m_dot_C'] = 0.0
        s['m_dot_D'] = 0.0
        s['m_dot_E'] = 0.0
		#-----
		# Temperature
		#-----
			# Tanks
		s['T_TA'] = 0.0