def insert_or_update_data(series_df, samples_df): gse_name = series_df['series_geo_accession'][0] # Create series and its attributes attrs = { cut_prefix(name, 'series_'): uni_cat(series_df[name]) for name in series_df.columns } assert attrs['sample_taxid'] == attrs['platform_taxid'] series, created = Series.objects.update_or_create( gse_name=gse_name, defaults={'attrs': attrs}) # Create platform gpls = samples_df['sample_platform_id'].unique() assert len(gpls) == 1 gpl_name = gpls[0] print(" %s" % gpl_name) platform, _ = Platform.objects.get_or_create( gpl_name=gpl_name, defaults={'specie': SPECIES[attrs['platform_taxid']]}) # If updating check if some samples no longer present, # mark disappeared samples as deleted. if not created: old_samples = Sample.objects.filter(series=series, platform=platform) \ .filter(Q(deleted=None) | Q(deleted='F')) \ .values_list('gsm_name', flat=True) dead_samples = set(old_samples) - set(samples_df.index) if dead_samples: # Use lame boolean-like 'T' cause sharing db with web2py Sample.objects.filter(series=series, platform=platform, gsm_name__in=dead_samples) \ .update(deleted='T') print( colored(' marked %d samples as deleted' % len(dead_samples), 'red')) # Create/update samples and their attributes for gsm_name in samples_df.index: attrs = { cut_prefix(name, 'sample_'): value.strip() for name, value in list(samples_df.ix[gsm_name].to_dict().items()) } Sample.objects.update_or_create(gsm_name=gsm_name, series=series, platform=platform, deleted=None, defaults={'attrs': attrs}) action = 'inserted' if created else 'updated' print( colored(' %s %s, %d samples' % (action, gse_name, len(samples_df)), 'green', attrs=['bold']))
def remote_ip() -> IPAddress: """Return request's IP address (i.e. address of the client).""" addr = request.environ.get('HTTP_X_FORWARDED_FOR') or request.environ.get( 'REMOTE_ADDR') # nginx uses ::ffff: as a prefix for IPv4 addresses in ipv6only=off mode. return ip_address(cut_prefix(addr, '::ffff:'))
def configurable_middleware(call): prefix = call._func.__name__ + '__' overwrites = { cut_prefix(name, prefix): value for name, value in SETTINGS.get().items() if name.startswith(prefix) } return call(**overwrites)
def parse_single_event(event): REGEX = re.compile(r'EVENT type [0-9]+ [(]([^)]+)[)]') event_name = re.match(REGEX, event).group(1) key_code = -1 for line in event.splitlines(): if 'detail:' in line: key_code = cut_prefix(line.strip(), 'detail: ') key_code = int(key_code) return event_name, key_code
def get_keycode_map(): output = subprocess.run(['xmodmap', '-pke'], check=True, stdout=subprocess.PIPE).stdout.decode('utf-8') mappings = output.splitlines() map_dic = {} for mapping in mappings: code, maps = re.split(' = ?', mapping) code = cut_prefix(code, 'keycode ') code = int(code) maps = tuple(maps.split(' ')) map_dic[code] = maps return map_dic
def lookup(func): if isinstance(func, str): ref = func module, func = _resolve_ref(ref) # Try to find class method full_name = _full_name(func) if full_name != ref: attr = cut_prefix(ref, full_name).split('.')[0] try: func = getattr(func, attr) except AttributeError: pass source_lines, lineno = inspect.getsourcelines(func) source = ''.join(source_lines) return '# %s:%d\n%s' % (inspect.getfile(func), lineno, source)
def remote_ip() -> IPAddress: """Return request's IP address (i.e. address of the client).""" addr = request.environ.get('HTTP_X_FORWARDED_FOR') or request.environ.get('REMOTE_ADDR') # nginx uses ::ffff: as a prefix for IPv4 addresses in ipv6only=off mode. return ip_address(cut_prefix(addr, '::ffff:'))