예제 #1
0
파일: account.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Accounts')
        page.header = DIV(H1(page.title),
                          utils.rst_to_html(Account.__doc__))

        if self.get_editable(self.user):
            page.append(P(FORM(INPUT(type='submit', value='Create new account'),
                               method='GET',
                               action=configuration.get_url('account'))))

        rows = [TR(TH('Account'),
                   TH('Full name'),
                   TH('Role'),
                   TH('Initials'))]
        for result in self.db.view('account/name', include_docs=True):
            doc = result.doc
            ref = A(result.key,
                    href=configuration.get_url('account', result.key))
            rows.append(TR(TD(ref),
                           TD(result.value or ''),
                           TD(doc.get('role')),
                           TD(doc.get('initials') or '')))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #2
0
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Instruments')
        page.header = DIV(H1(page.title),
                          utils.rst_to_html(Instrument.__doc__))

        if self.get_editable(self.user):
            page.append(P(FORM(INPUT(type='submit',
                                     value='Create new instrument'),
                               method='GET',
                               action=configuration.get_url('instrument'))))

        rows = [TR(TH('Instrument'),
                   TH('Label'),
                   TH('Type'),
                   TH('Timestamp'))]
        view = self.db.view('instrument/name', include_docs=True)
        for result in view:
            doc = result.doc
            instrument = A(doc['name'],
                           href=configuration.get_url('instrument',doc['name']))
            rows.append(TR(TD(instrument),
                           TD(doc['label'] or ''),
                           TD(doc['type']),
                           TD(doc['timestamp'])))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #3
0
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Instruments')
        page.header = DIV(H1(page.title),
                          utils.rst_to_html(Instrument.__doc__))

        if self.get_editable(self.user):
            page.append(
                P(
                    FORM(INPUT(type='submit', value='Create new instrument'),
                         method='GET',
                         action=configuration.get_url('instrument'))))

        rows = [TR(TH('Instrument'), TH('Label'), TH('Type'), TH('Timestamp'))]
        view = self.db.view('instrument/name', include_docs=True)
        for result in view:
            doc = result.doc
            instrument = A(doc['name'],
                           href=configuration.get_url('instrument',
                                                      doc['name']))
            rows.append(
                TR(TD(instrument), TD(doc['label'] or ''), TD(doc['type']),
                   TD(doc['timestamp'])))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #4
0
파일: tool.py 프로젝트: SciLifeLab/slog
 def GET(self, request, response):
     # XXX implement check_viewable properly
     self.check_viewable(self.user)
     page = HtmlPage(self, title="Tool %s" % self.tool)
     page.header = DIV(H1(page.title), utils.rst_to_html(self.tool.__doc__))
     page.append(
         FORM(self.tool.get_view(self),
              INPUT(type='hidden',
                    name='entity',
                    value=self.tool.get_entity_tag(self.doc)),
              method='POST',
              action=self.tool.get_url()))
     page.write(response)
예제 #5
0
파일: task.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Tasks')
        page.header = DIV(H1(page.title),
                          utils.rst_to_html(Task.__doc__))

        if self.get_editable(self.user):
            page.append(P(FORM(INPUT(type='submit',
                                     value='Create new task'),
                               method='GET',
                               action=configuration.get_url('task'))))

        operator = self.get_selected_operator(request)
        page.append(P(self.get_operator_select_form('tasks',operator)))

        if operator:
            view = self.db.view('task/operator', include_docs=True)
            result = view[operator]
        else:
            result = self.db.view('task/name', include_docs=True)
        tasks = [r.doc for r in result]
        tasks.sort(lambda i, j: cmp(i['name'], i['name']))

        rows = [TR(TH('Task'),
                   TH('Runname'),
                   TH('Protocol'),
                   TH('Instrument'),
                   TH('Operator'),
                   TH('Timestamp'))]
        for row in result:
            doc = row.doc
            task = A(doc['name'], href=configuration.get_entity_url(doc))
            url = configuration.get_url('protocol', doc['protocol'])
            protocol = A(doc['protocol'], href=url)
            instrument = doc.get('instrument') or ''
            if instrument:
                url = configuration.get_url('instrument', instrument)
                instrument = A(instrument, href=url)
            operator = doc.get('operator') or ''
            if operator:
                url = configuration.get_url('account', operator)
                operator = A(operator, href=url)
            rows.append(TR(TD(task),
                           TD(doc.get('runname') or ''),
                           TD(protocol),
                           TD(instrument),
                           TD(operator),
                           TD(doc['timestamp'])))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #6
0
파일: home.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        title = 'slog: simple lab tracking'
        page = HtmlPage(self, title=title)
        page.header = DIV(H1('slog: simple lab tracking'),
                          utils.rst_to_html("""Slog is a simple tracking system
for the lab. It consists of a number of types of entities representing things
to which information is attached. The entities have defined relationships
to each other. A log of who did what when to an entity is maintained.
A log entry also contains a snapshot of the information for an entity before
the change."""))
        page.append(H2('Types of entities in the system'))
        rows = []
        for klass in [Account,
                      Project,
                      Sample,
                      Workset,
                      Protocol,
                      Task,
                      Instrument]:
            rows.append(TR(TH(klass.__name__),
                           TD(utils.rst_to_html(klass.__doc__))))
        page.append(TABLE(*rows))
        page.write(response)
예제 #7
0
파일: tool.py 프로젝트: SciLifeLab/slog
 def GET(self, request, response):
     # XXX implement check_viewable properly
     self.check_viewable(self.user)
     page = HtmlPage(self, title="Tool %s" % self.tool)
     page.header = DIV(H1(page.title), utils.rst_to_html(self.tool.__doc__))
     page.append(
         FORM(
             self.tool.get_view(self),
             INPUT(type="hidden", name="entity", value=self.tool.get_entity_tag(self.doc)),
             method="POST",
             action=self.tool.get_url(),
         )
     )
     page.write(response)
예제 #8
0
파일: workset.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Worksets')
        page.header = DIV(H1(page.title),
                          utils.rst_to_html(Workset.__doc__))

        if self.get_editable(self.user):
            page.append(P(FORM(INPUT(type='submit', value='Create new workset'),
                               method='GET',
                               action=configuration.get_url('workset'))))

        operator = self.get_selected_operator(request)
        page.append(P(self.get_operator_select_form('worksets', operator)))

        if operator:
            view = self.db.view('workset/operator', include_docs=True)[operator]
        else:
            view = self.db.view('workset/name', include_docs=True)
        worksets = [r.doc for r in view]
        worksets.sort(lambda i, j: cmp(i['name'], i['name']))

        rows = [TR(TH('Workset'),
                   TH('Operator'),
                   TH('Samples'),
                   TH('Timestamp'))]
        for workset in worksets:
            operator = workset.get('operator')
            if operator:
                url = configuration.get_url('account', operator)
                operator = A(operator, href=url)
            else:
                operator = ''
            samples = workset.get('samples', [])
            for i, sample in enumerate(samples):
                url = configuration.get_url('sample', sample)
                samples[i] = str(A(sample, href=url))
            samples = ', '.join(samples)

            url = configuration.get_url('workset', workset['name'])
            rows.append(TR(TD(A(workset['name'], href=url)),
                           TD(operator),
                           TD(samples),
                           TD(workset['timestamp'])))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #9
0
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Tasks')
        page.header = DIV(H1(page.title), utils.rst_to_html(Task.__doc__))

        if self.get_editable(self.user):
            page.append(
                P(
                    FORM(INPUT(type='submit', value='Create new task'),
                         method='GET',
                         action=configuration.get_url('task'))))

        operator = self.get_selected_operator(request)
        page.append(P(self.get_operator_select_form('tasks', operator)))

        if operator:
            view = self.db.view('task/operator', include_docs=True)
            result = view[operator]
        else:
            result = self.db.view('task/name', include_docs=True)
        tasks = [r.doc for r in result]
        tasks.sort(lambda i, j: cmp(i['name'], i['name']))

        rows = [
            TR(TH('Task'), TH('Runname'), TH('Protocol'), TH('Instrument'),
               TH('Operator'), TH('Timestamp'))
        ]
        for row in result:
            doc = row.doc
            task = A(doc['name'], href=configuration.get_entity_url(doc))
            url = configuration.get_url('protocol', doc['protocol'])
            protocol = A(doc['protocol'], href=url)
            instrument = doc.get('instrument') or ''
            if instrument:
                url = configuration.get_url('instrument', instrument)
                instrument = A(instrument, href=url)
            operator = doc.get('operator') or ''
            if operator:
                url = configuration.get_url('account', operator)
                operator = A(operator, href=url)
            rows.append(
                TR(TD(task), TD(doc.get('runname') or ''), TD(protocol),
                   TD(instrument), TD(operator), TD(doc['timestamp'])))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #10
0
파일: workset.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Worksets')
        page.header = DIV(H1(page.title), utils.rst_to_html(Workset.__doc__))

        if self.get_editable(self.user):
            page.append(
                P(
                    FORM(INPUT(type='submit', value='Create new workset'),
                         method='GET',
                         action=configuration.get_url('workset'))))

        operator = self.get_selected_operator(request)
        page.append(P(self.get_operator_select_form('worksets', operator)))

        if operator:
            view = self.db.view('workset/operator',
                                include_docs=True)[operator]
        else:
            view = self.db.view('workset/name', include_docs=True)
        worksets = [r.doc for r in view]
        worksets.sort(lambda i, j: cmp(i['name'], i['name']))

        rows = [
            TR(TH('Workset'), TH('Operator'), TH('Samples'), TH('Timestamp'))
        ]
        for workset in worksets:
            operator = workset.get('operator')
            if operator:
                url = configuration.get_url('account', operator)
                operator = A(operator, href=url)
            else:
                operator = ''
            samples = workset.get('samples', [])
            for i, sample in enumerate(samples):
                url = configuration.get_url('sample', sample)
                samples[i] = str(A(sample, href=url))
            samples = ', '.join(samples)

            url = configuration.get_url('workset', workset['name'])
            rows.append(
                TR(TD(A(workset['name'], href=url)), TD(operator), TD(samples),
                   TD(workset['timestamp'])))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #11
0
파일: sample.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Samples')
        page.header = DIV(H1(page.title),
                          utils.rst_to_html(Sample.__doc__))

        if self.user.get('role') in ('admin', 'manager', 'engineer'):
            operator = self.get_selected_operator(request)
            page.append(P(self.get_operator_select_form('samples', operator)))
        else:                           # Customer can only view his own samples
            operator = self.user['name']
        view = self.db.view('project/customer')
        if operator:
            result = list(view[operator])
        else:
            result = list(view)
        projects = [r.value for r in result]

        rows = [TR(TH('Project'),
                   TH('Sample'),
                   TH('Customername'))]
        for project in projects:
            link_project = A(project,
                             href=configuration.get_url('project', project))
            view = self.db.view('sample/project', include_docs=True)
            samples = [r.doc for r in view[project]]
            if samples:
                samples.sort(lambda i, j: cmp(i['name'], j['name']))
                for sample in samples:
                    if link_project:
                        cells = [TD(link_project, rowspan=len(samples))]
                        link_project = None # Skip after first row
                    else:
                        cells = []
                    url = configuration.get_entity_url(sample)
                    cells.append(TD(A(sample['name'], href=url)))
                    cells.append(TD(sample.get('customername') or ''))
                    rows.append(TR(*cells))
            else:
                rows.append(TR(TD(link_project)))
        page.append(TABLE(border=1, *rows))
        page.write(response)
예제 #12
0
파일: protocol.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Protocols')
        page.header = DIV(H1(page.title), utils.rst_to_html(Protocol.__doc__))

        if self.get_editable(self.user):
            page.append(
                P(
                    FORM(INPUT(type='submit', value='Create new protocol'),
                         method='GET',
                         action=configuration.get_url('protocol'))))

        view = self.db.view('protocol/name', include_docs=True)
        rows = [TR(TH('Protocol'), TH('Timestamp'))]
        for result in view:
            doc = result.doc
            protocol = A(doc['name'],
                         href=configuration.get_url('protocol', doc['name']))
            rows.append(TR(TD(protocol), TD(doc['timestamp'])))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #13
0
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Samples')
        page.header = DIV(H1(page.title), utils.rst_to_html(Sample.__doc__))

        if self.user.get('role') in ('admin', 'manager', 'engineer'):
            operator = self.get_selected_operator(request)
            page.append(P(self.get_operator_select_form('samples', operator)))
        else:  # Customer can only view his own samples
            operator = self.user['name']
        view = self.db.view('project/customer')
        if operator:
            result = list(view[operator])
        else:
            result = list(view)
        projects = [r.value for r in result]

        rows = [TR(TH('Project'), TH('Sample'), TH('Customername'))]
        for project in projects:
            link_project = A(project,
                             href=configuration.get_url('project', project))
            view = self.db.view('sample/project', include_docs=True)
            samples = [r.doc for r in view[project]]
            if samples:
                samples.sort(lambda i, j: cmp(i['name'], j['name']))
                for sample in samples:
                    if link_project:
                        cells = [TD(link_project, rowspan=len(samples))]
                        link_project = None  # Skip after first row
                    else:
                        cells = []
                    url = configuration.get_entity_url(sample)
                    cells.append(TD(A(sample['name'], href=url)))
                    cells.append(TD(sample.get('customername') or ''))
                    rows.append(TR(*cells))
            else:
                rows.append(TR(TD(link_project)))
        page.append(TABLE(border=1, *rows))
        page.write(response)
예제 #14
0
파일: project.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Projects')
        page.header = DIV(H1(page.title),
                          utils.rst_to_html(Project.__doc__))

        if self.get_editable(self.user):
            page.append(P(FORM(INPUT(type='submit', value='Create new project'),
                               method='GET',
                               action=configuration.get_url('project'))))

        view = self.db.view('sample/project_count', group=True)
        counts = dict([(r.key, r.value) for r in view])
        rows = [TR(TH('Project'),
                   TH('Label'),
                   TH('Customer'),
                   TH('# Samples'),
                   TH('Timestamp'))]
        view = self.db.view('project/timestamp',
                            descending=True,
                            include_docs=True)
        for result in view:
            doc = result.doc
            project = A(doc['name'],
                        href=configuration.get_url('project', doc['name']))
            # Defensive programming: in reality always defined
            customer = doc.get('customer')
            if customer:
                customer = A(customer,
                             href=configuration.get_url('account', customer))
            rows.append(TR(TD(project),
                           TD(result.value or ''),
                           TD(customer),
                           TD(str(counts.get(doc['name'], 0))),
                           TD(result.key)))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #15
0
파일: account.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Accounts')
        page.header = DIV(H1(page.title), utils.rst_to_html(Account.__doc__))

        if self.get_editable(self.user):
            page.append(
                P(
                    FORM(INPUT(type='submit', value='Create new account'),
                         method='GET',
                         action=configuration.get_url('account'))))

        rows = [TR(TH('Account'), TH('Full name'), TH('Role'), TH('Initials'))]
        for result in self.db.view('account/name', include_docs=True):
            doc = result.doc
            ref = A(result.key,
                    href=configuration.get_url('account', result.key))
            rows.append(
                TR(TD(ref), TD(result.value or ''), TD(doc.get('role')),
                   TD(doc.get('initials') or '')))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #16
0
파일: project.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Projects')
        page.header = DIV(H1(page.title), utils.rst_to_html(Project.__doc__))

        if self.get_editable(self.user):
            page.append(
                P(
                    FORM(INPUT(type='submit', value='Create new project'),
                         method='GET',
                         action=configuration.get_url('project'))))

        view = self.db.view('sample/project_count', group=True)
        counts = dict([(r.key, r.value) for r in view])
        rows = [
            TR(TH('Project'), TH('Label'), TH('Customer'), TH('# Samples'),
               TH('Timestamp'))
        ]
        view = self.db.view('project/timestamp',
                            descending=True,
                            include_docs=True)
        for result in view:
            doc = result.doc
            project = A(doc['name'],
                        href=configuration.get_url('project', doc['name']))
            # Defensive programming: in reality always defined
            customer = doc.get('customer')
            if customer:
                customer = A(customer,
                             href=configuration.get_url('account', customer))
            rows.append(
                TR(TD(project), TD(result.value or ''), TD(customer),
                   TD(str(counts.get(doc['name'], 0))), TD(result.key)))
        page.append(TABLE(border=1, *rows))

        page.write(response)
예제 #17
0
파일: protocol.py 프로젝트: SciLifeLab/slog
    def GET(self, request, response):
        self.check_viewable(self.user)
        page = HtmlPage(self, title='Protocols')
        page.header = DIV(H1(page.title),
                          utils.rst_to_html(Protocol.__doc__))

        if self.get_editable(self.user):
            page.append(P(FORM(INPUT(type='submit',
                                     value='Create new protocol'),
                               method='GET',
                               action=configuration.get_url('protocol'))))

        view = self.db.view('protocol/name', include_docs=True)
        rows = [TR(TH('Protocol'),
                   TH('Timestamp'))]
        for result in view:
            doc = result.doc
            protocol = A(doc['name'],
                        href=configuration.get_url('protocol', doc['name']))
            rows.append(TR(TD(protocol),
                           TD(doc['timestamp'])))
        page.append(TABLE(border=1, *rows))

        page.write(response)