Ejemplo n.º 1
0
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']))
Ejemplo n.º 2
0
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:'))
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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:'))