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')
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)
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
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()
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()
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