Esempio n. 1
0
 def schema(cls, data):
     return named_tuple_helper(
         cls, {
             'input_dir':
             voluptuous.All(
                 voluptuous.validators.Length(min=1),
                 [voluptuous.Any(voluptuous.IsDir(), voluptuous.IsFile())],
             ),
             'model':
             voluptuous.validators.IsFile(),
         }, data)
Esempio n. 2
0
def add_args(parser: argparse.ArgumentParser):
    parser.add_argument("eval.sam_path", nargs="+")
    parser.add_argument("-r",
                        "--reference",
                        dest="eval.reference",
                        type=voluptuous.IsFile(),
                        required=True)
    parser.add_argument("-w",
                        "--work-dir",
                        dest="eval.work_dir",
                        type=voluptuous.IsDir(),
                        default=".")
    parser.add_argument(
        "--calc_consensus",
        dest="eval.calc_consensus",
        action="store_true",
        default=None,
    )
    parser.set_defaults(func=run_args)
def isfile(value):
    """Validate that the value is an existing file."""
    return vol.IsFile('not a file')(value)
Esempio n. 4
0
        vol.All([vol.Coerce(int)], vol.Length(min=3, max=3)),
        vol.Required(CONF_CHANNELS):
        [{
            vol.Required(CONF_CHANNEL): vol.Coerce(str),
            vol.Required(CONF_JOB_NAME): vol.Coerce(str),
            vol.Required(CONF_DETECTOR_NUM): vol.Coerce(int),
            vol.Required(CONF_DEFAULT_GAIN): vol.Coerce(int),
            vol.Required(CONF_MAX_GAIN): vol.Coerce(int),
        }],
        vol.Required(CONF_WELL_LAYOUT): {
            vol.Required(CONF_X_FIELDS): vol.Coerce(int),
            vol.Required(CONF_Y_FIELDS): vol.Coerce(int),
        },
        # pylint: disable=no-value-for-parameter
        CONF_SAMPLE_STATE_FILE:
        vol.All(vol.IsFile(), is_csv, read_csv, is_sample_state),
    }, )


async def setup_module(center, config):
    """Set up production plugin."""
    conf = config["production"]
    flow = WorkFlow(center, conf)
    state_data = conf.get(CONF_SAMPLE_STATE_FILE)
    if state_data is None:
        x_wells = 12
        y_wells = 8
        state_data = [{
            SAMPLE_PLATE_NAME: PLATE_NAME,
            SAMPLE_WELL_X: well_x,
            SAMPLE_WELL_Y: well_y,
Esempio n. 5
0
def main():
    logging.basicConfig(level=logging.INFO)
    parser = argparse.ArgumentParser()
    parser.add_argument('--config', type=voluptuous.IsFile(), required=True)
    parser.add_argument('--port', type=int, default=8050)
    parser.add_argument(
        '--db',
        default='sqlite://',
        help=
        'db engine connection string.\nSee http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls for more details.'
    )
    args = parser.parse_args()

    with open(args.config, 'r') as f:
        cfg = Config(**schema(yaml.load(f)))
    logging.info(f"{pp.pformat(cfg)}")

    engine = create_engine(args.db)
    metadata = MetaData()
    responses = Table('responses', metadata,
                      Column('time', sa.DateTime),
                      *[Column(q.text, sa.Float) for q in cfg.questions])
    print(metadata.create_all(engine))

    app = dash.Dash(url_base_pathname='/app')
    components = html.Div(
        [question_components(i, x) for i, x in enumerate(cfg.questions)],
        className='row')

    results = html.Div(
        [
            html.Button("Submit!", id='submit', className='col-lg-12'),
            *[output_slider(i, f) for i, f in enumerate(cfg.factors)],
            html.A(
                "Download CSV data",
                href='download_csv',
                className='col-lg-12')
        ],
        className='row')
    app.layout = html.Div(
        [
            html.Div(
                [
                    html.Div(
                        html.H2("""
Here are a number of characteristics that may or may not apply to you. For example, do you agree
that you are someone who likes to spend time with others? Please write a number next to each
statement to indicate the extent to which you agree or disagree with that statement. Leftmost (number 1) is strongly disagree, rightmost (number 5) is strongly agree.
                    """),
                        className='col-lg-12'),
                    html.Div(components, className='col-lg-6'),
                    html.Div(results, className='col-lg-6'),
                ],
                className='row'),
            html.Div(
                [
                    html.Div("", id="saved_callback"),
                ],
                style={
                    'display': 'none'
                })
        ],
        className='container-fluid',
    )

    for i, f in enumerate(cfg.factors):
        link_factor(app, i, f)

    @app.callback(
        Output('saved_callback', 'children'),
        state=[State(f'q-{i}', 'value') for i in range(len(cfg.questions))],
        events=[Event('submit', 'click')],
    )
    def dump_to_db(*args):
        with engine.connect() as conn:
            conn.execute(responses.insert().values({
                'time': datetime.datetime.utcnow(),
                **{
                    q.text: float(r) for q, r in zip(cfg.questions, args)
                }
            }))
        return "whatever"

    @app.server.route('/')
    def red():
        return redirect('/app')

    @app.server.route('/download_csv', methods=['GET'])
    def download_csv():
        s = StringIO()
        with engine.connect() as conn:
            data = pd.read_sql_query(
                sql=sa.text(f"SELECT * FROM {responses.name}"), con=conn)
        data.to_csv(s)
        return Response(
            s.getvalue(),
            mimetype="text/csv",
            headers={
                "Content-disposition": f"attachment; filename=data.csv"
            })

    # app.css.config.serve_locally = True
    app.scripts.config.serve_locally = True

    app.css.append_css({
        "external_url":
        "https://codepen.io/chriddyp/pen/bWLwgP.css"
    })
    app.css.append_css({
        "external_url":
        "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css"
    })

    app.run_server(port=args.port)
Esempio n. 6
0
     str,
     vt.Required("maxLogFileSize", default="1M"):
     str,
     vt.Required("keepLogFiles", default=3):
     vt.Coerce(int),
     # only syslog
     vt.Required("logHost", default="localhost"):
     vt.All(str, vt.Length(min=2)),
     vt.Required("logPort", default=514):
     vt.All(vt.Coerce(int), vt.Range(min=1)),
 },
 "api": {
     vt.Required("complianceLevel", default=1):
     vt.All(vt.Coerce(int), vt.Range(min=0, max=2)),
     vt.Required("specFile", default=default_spec_file):
     vt.All(vt.IsFile()),
     vt.Required("basePath", default="/api"):
     vt.All(str, vt.Length(min=1)),
     vt.Required("maxSize", default=200):
     vt.All(vt.Coerce(int), vt.Range(min=5)),
     vt.Required("formats", default=["application/json"]):
     vt.All(list, vt.Length(min=1)),  # FIMXE: validation?
 },
 # FIMXE: should this be required withould default values?
 "metadata": {
     vt.Required("description", default="No description available"): str,
     vt.Required("provider",
                 default="No data provider information available"): str,
     vt.Required("contact", default="No contact information available"):
     str,
 },