예제 #1
0
  def create_report(self):
    from report.report import Report
    import json

    if len(self.params)>0:
      params = json.loads(self.params[0])

    if not "orientation" in params:
      params["orientation"] = "p"
    if not "size" in params:
      params["size"] = "a4"
    if not "output" in params:
      params["output"] = "pdf"
    rpt = Report(orientation=params["orientation"],format=params["size"])

    if "data" in params:
      rpt.databind = params["data"]
    if "template" in params:
      rpt.loadDefinition(params["template"])
    rpt.createReport()
    if params["output"] == "pdf":
      import binascii
      sys.stdout.write(binascii.b2a_base64(rpt.save2Pdf()))
    elif output == "xml":
      sys.stdout.write(rpt.save2Xml())
    else:
      sys.stdout.write(rpt.save2Html())
예제 #2
0
    def execute(self):
        cfg = self.conf

        global_project = cfg['general']['short_name']
        elastic = cfg['es_enrichment']['url']
        data_dir = cfg['report']['data_dir']
        end_date = cfg['report']['end_date']
        start_date = cfg['report']['start_date']
        offset = cfg['report']['offset']
        config_file = cfg['report']['config_file']
        interval = cfg['report']['interval']
        filters = cfg['report']['filters']

        if not os.path.exists(data_dir):
            os.makedirs(data_dir)

        # All the dates must be UTC, including those from command line
        if end_date == 'now':
            end_date = parser.parse(
                date.today().strftime('%Y-%m-%d')).replace(tzinfo=timezone.utc)
        else:
            end_date = parser.parse(end_date).replace(tzinfo=timezone.utc)
        # The end date is not included, the report must finish the day before
        end_date += timedelta(microseconds=-1)
        start_date = parser.parse(start_date).replace(tzinfo=timezone.utc)

        offset = offset if offset else None

        report = Report(elastic,
                        start=start_date,
                        end=end_date,
                        data_dir=data_dir,
                        filters=Report.get_core_filters(filters),
                        interval=interval,
                        offset=offset,
                        config_file=config_file)
        report.create()

        # First copy the reports template to create a new report from it
        tmp_path = tempfile.mkdtemp(prefix='report_')
        copy_tree("reports/report_template", tmp_path)
        # Copy the data generated to be used in LaTeX template
        copy_tree("report_data", os.path.join(tmp_path, "data"))
        copy_tree("report_data", os.path.join(tmp_path, "figs"))
        # Change the project global name
        cmd = ['sed -i s/TemplateProject/' + global_project + '/g *.tex']
        subprocess.call(cmd, shell=True, cwd=tmp_path)
        # Fix LaTeX special chars
        cmd = [r'sed -i "s/\&/\\\&/g" data/git_top_organizations_*']
        subprocess.call(cmd, shell=True, cwd=tmp_path)
        # Build the report
        subprocess.call("make", shell=True, cwd=tmp_path)
        # Copy the report
        copy_tree(os.path.join(tmp_path, "pdf"), "report_data/pdf")
        shutil.rmtree(tmp_path)
예제 #3
0
 def text_report(self):
     answer = SelectFeaturesAllDialog.ask(self,
                                          self.raw_table.features,
                                          self.norm_table.features,
                                          self.labels_table.features,
                                          policy=[1])
     if answer == QDialog.Rejected:
         return
     features_raw, features_norm, features_labels = answer
     feature_labels = features_labels[0]
     labels_features = [
         x for x in self.labels_table.features if x != feature_labels
     ]
     report = Report(feature_labels.series)
     norm_data = []
     if len(features_norm) > 0:
         norm_data = pd.concat([f.series for f in features_norm], axis=1)
     raw_data = []
     for f in features_raw:
         if f.is_nominal:
             raw_data.extend(f.expose_one_hot())
         else:
             raw_data.append(f)
     norm_data = None if len(norm_data) == 0 else norm_data
     raw_data = None if len(raw_data) == 0 else raw_data
     raw_data = pd.concat([f.series for f in raw_data], axis=1)
     TextReportDialog.ask(self, feature_labels.result, report, norm_data,
                          raw_data, labels_features,
                          self.raw_table.features)
예제 #4
0
def aggregate(self, experimentID, user):
  """
    Aggregate the GFP scores and send report
  """
  gfps = GFP.objects.filter(experiment_id=experimentID)
  log.debug("RUNNING aggregate: initialize method")

  algorithm = Algorithm()
  algorithm = algorithm.getAlgorithm("NV")
  algorithm.loadDataAggregate()
  algorithm.aggregate(gfps, experimentID)

  experiment = Experiment.objects.filter(id=experimentID)
  log.debug("RUNNING aggregate: start report")
  report = Report(experimentID)
  filename = REPORT_DIR + "sapling_gfp_report_" + slugify(experiment[0].Name) + "_" + str(experimentID) + ".pdf"
  report.generateReport(filename)
  del report

  subject = "SAPLING report: " + experiment[0].Name
  body = "Dear " + user.first_name + " "+ user.last_name + ",\n\n"
  body += "Please find attached a report of your experiment " + experiment[0].Name + ".\n\n"
  body += "Regards,\n SAPLING"

  email = EmailMessage(subject=subject, body=body, from_email="*****@*****.**", to=[user.email])
  reportname = "sapling_gfp_report_" + slugify(experiment[0].Name) + "_" + str(experimentID) + ".pdf"
  handle = open(filename, 'rb')
  email.attach(reportname, handle.read(), "application/pdf")

  enrichname = "Enrichment_GeneList_GO_" + str(experimentID) + ".csv"
  filename = REPORT_DIR + "Enrichment_GeneList_GO_" + str(experimentID) + ".csv"
  handle = open(filename, 'rb')
  email.attach(enrichname, handle.read(), "text/csv")

  email.send()
  handle.close()

  log.debug("DONE Aggregate")
예제 #5
0
  def load_report_xml(self):
    from report.report import Report
    
    orient = "p"
    if len(self.params)>0:
      orient = self.params[0]
    output = "pdf"  
    if len(self.params)>1:
      output = self.params[1]
    deffile = self.params[2]

    rpt = Report(orient)
    xdata = self.read_file(deffile)
    rpt.loadDefinition(xdata)
    rpt.createReport()
    if output == "pdf":
      import binascii
      sys.stdout.write(binascii.b2a_base64(rpt.save2Pdf()))
    elif output == "xml":
      sys.stdout.write(rpt.save2Xml())
    else:
      sys.stdout.write(rpt.save2Html())
예제 #6
0
def report_tests(report: Report) -> None:
    yield None
    report.finalize()
    assert report.passed() is True
예제 #7
0
def predict(self, gfpID, user):
  """
    annotation: list of gene symbols
  """
  log.debug("Start time: %s" % timezone.now().strftime('%d/%m/%Y %H:%M:%S'))

  gfp = GFP.objects.filter(id=gfpID)
  gfp = gfp[0]

  log.debug("RUNNING: initialize method")
  self.update_state(state='RUNNING', meta='Initialize method')
  if not ProcessManagement.objects.filter(gfp_id=gfpID, experiment_id=gfp.experiment_id).exists():
    ProcessManagement.objects.create(gfp_id=gfpID, experiment_id=gfp.experiment_id, \
      State= "RUNNING: initialize method", Name=gfp.Network+"_"+gfp.Algorithm)
  else:
    ProcessManagement.objects.filter(gfp_id=gfpID, experiment_id=gfp.experiment_id).update(State= \
      "RUNNING: initialize method")

  algorithm = Algorithm()
  algorithm = algorithm.getAlgorithm(gfp.Algorithm)

  log.debug("RUNNING: load files")
  self.update_state(state='RUNNING', meta='Load files')
  ProcessManagement.objects.filter(gfp_id=gfpID, experiment_id=gfp.experiment_id).update(State= \
    "RUNNING: load files")

  algorithm.loadData(gfpID)

  log.debug("RUNNING: run method")
  self.update_state(state='RUNNING', meta='Run method')
  ProcessManagement.objects.filter(gfp_id=gfpID, experiment_id=gfp.experiment_id).update(State= \
    "RUNNING: run method")
  algorithm.run()

  log.debug("RUNNING: save predictions")
  self.update_state(state='RUNNING', meta='Save predictions')
  ProcessManagement.objects.filter(gfp_id=gfpID, experiment_id=gfp.experiment_id).update( \
    State="RUNNING: save predictions")

  algorithm.save(gfpID)

  log.debug("RUNNING: enrichment")
  algorithm.enrichment(gfp.experiment_id, gfpID)

  ProcessManagement.objects.filter(gfp_id=gfpID, experiment_id=gfp.experiment_id).update( \
    State="FINISHED")
  log.debug("FINISHED")

  gfps = GFP.objects.filter(experiment_id=gfp.experiment_id)

  processes = ProcessManagement.objects.filter(experiment_id=gfp.experiment_id)

  flag = True
  if len(processes) != len(gfps):
    flag = False
  else:
    for process in processes:
      if process.State != "FINISHED":
        flag = False
        break

  log.debug("Experiment flag: %s", str(flag))

  ## Create report and aggregate
  if flag:
    log.debug("REPORT EMAIL")

    gfps = GFP.objects.filter(experiment_id=gfp.experiment_id)

    # Aggregation of GFPs
    algorithm.aggregate(gfps, gfp.experiment_id)

    experiment = Experiment.objects.filter(id=gfp.experiment_id)
    log.debug("RUNNING: start report")
    report = Report(gfp.experiment_id)
    filename = REPORT_DIR + "sapling_gfp_report_" + slugify(experiment[0].Name) + "_" \
		+ str(gfp.experiment_id) + ".pdf"
    log.debug("RUNNING: %s" % filename)
    report.generateReport(filename)
    del report

    subject = "SAPLING report: " + experiment[0].Name
    body = "Dear " + user.first_name + " "+ user.last_name + ",\n\n"
    body += "Please find attached a report of your experiment " + experiment[0].Name + ".\n\n"
    body += "Regards,\n SAPLING"
	
    email = EmailMessage(subject=subject, body=body, from_email="*****@*****.**", to=[user.email])
    reportname = "sapling_gfp_report_" + slugify(experiment[0].Name) + "_" + str(gfp.experiment_id) + ".pdf"
    handle = open(filename, 'rb')
    email.attach(reportname, handle.read(), "application/pdf")

    enrichname = "Enrichment_GeneList_GO_" + str(gfp.experiment_id) + ".csv"
    filename = REPORT_DIR + "Enrichment_GeneList_GO_" + str(gfp.experiment_id) + ".csv"
    handle = open(filename, 'rb')
    email.attach(enrichname, handle.read(), "text/csv")

    email.send()
    handle.close()
    log.debug("DONE")
예제 #8
0
def report():
    return Report()
예제 #9
0
 def test_all(self, report: Report):
     report.soft_assert(True is True, "KEY-0001", "True is True")
     report.soft_assert(True is True, "KEY-0002", "True is True")
     report.soft_assert(True is False, "KEY-0003", "True should be false")
     report.soft_assert(True is False, "KEY-0004", "True should be false")
예제 #10
0
    def test_errors(self, report: Report):
        report.soft_assert(True is False, "KEY-0004", "True should be false")

        assert len(report.errors) == 1
예제 #11
0
    def test_failures(self, report: Report):
        report.soft_assert(True is False, "KEY-0003", "True should be false")

        assert len(report.failures) == 1
예제 #12
0
    def test_passed(self, report: Report):
        report.soft_assert(True is True, "KEY-0002", "True is True")

        assert report.passed()
예제 #13
0
    def test_successes(self, report: Report):
        report.soft_assert(True is True, "KEY-0001", "True is True")

        assert len(report.successes) == 1
예제 #14
0
  def create_report_sample(self):
    from report.report import Report

    orient = "p"
    if len(self.params)>0:
      orient = self.params[0]
    output = "pdf"  
    if len(self.params)>1:
      output = self.params[1]

    rpt = Report(orient)
    #default values
    rpt.template["document"]["title"] = "Nervatura Report"
    rpt.template["margins"]["left-margin"] = 15
    rpt.template["margins"]["top-margin"] = 15
    rpt.template["margins"]["right-margin"] = 15
    rpt.template["margins"]["bottom-margin"] = 15
    rpt.template["style"]["font-family"] = "times"

    #header
    header = rpt.template["elements"]["header"]
    row_data = rpt.insertElement(header, "row", -1, {"height": 10})
    rpt.insertElement(row_data, "image",-1,{"src":"logo"})
    rpt.insertElement(row_data, "cell",-1,{
      "name":"label", "value":"labels.title", "font-style": "bolditalic", "font-size": 26, "color": "#D8DBDA"})
    rpt.insertElement(row_data, "cell",-1,{
      "name":"label", "value":"Python Sample", "font-style": "bold", "align": "right"})
    rpt.insertElement(header, "vgap", -1, {"height": 2})
    rpt.insertElement(header, "hline", -1, {"border-color": 218})
    rpt.insertElement(header, "vgap", -1, {"height": 2})

    #details
    details = rpt.template["elements"]["details"]
    rpt.insertElement(details, "vgap", -1, {"height": 2})
    row_data = rpt.insertElement(details, "row")
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "width": "50%", "font-style": "bold", "value": "labels.left_text", "border": "LT", 
      "border-color": 218, "background-color": 245})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "font-style": "bold", "value": "labels.left_text", "border": "LTR", 
      "border-color": 218, "background-color": 245})

    row_data = rpt.insertElement(details, "row")
    rpt.insertElement(row_data, "cell",-1,{
      "name": "short_text", "width": "50%", "value": "head.short_text", "border": "L", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "short_text", "value": "head.short_text", "border": "LR", "border-color": 218})
    row_data = rpt.insertElement(details, "row")
    rpt.insertElement(row_data, "cell",-1,{
      "name": "short_text", "width": "50%", "value": "head.short_text", "border": "LB", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "short_text", "value": "head.short_text", "border": "LBR", "border-color": 218})

    row_data = rpt.insertElement(details, "row")
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "width": "40", "font-style": "bold", "value": "labels.left_text", "border": "LB", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "align": "center", "width": "30", "font-style": "bold", "value": "labels.center_text", 
      "border": "LB", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "align": "right", "width": "40", "font-style": "bold", "value": "labels.right_text", 
      "border": "LB", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "font-style": "bold", "value": "labels.left_text", "border": "LBR", "border-color": 218})

    row_data = rpt.insertElement(details, "row")
    rpt.insertElement(row_data, "cell",-1,{
      "name": "short_text", "width": "40", "value": "head.short_text", "border": "LB", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "date", "align": "center", "width": "30", "value": "head.date", "border": "LB", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "amount", "align": "right", "width": "40", "value": "head.number", "border": "LB", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "short_text", "value": "head.short_text", "border": "LBR", "border-color": 218})

    row_data = rpt.insertElement(details, "row")
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "font-style": "bold", "value": "labels.left_text", "border": "LB", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "short_text", "width": "50", "value": "head.short_text", "border": "LB", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "font-style": "bold", "value": "labels.left_text", "border": "LB", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "short_text", "value": "head.short_text", "border": "LBR", "border-color": 218})

    row_data = rpt.insertElement(details, "row")
    rpt.insertElement(row_data, "cell",-1,{
      "name": "long_text", "multiline": "true", "value": "head.long_text", "border": "LBR", "border-color": 218})

    rpt.insertElement(details, "vgap", -1, {"height": 2})
    row_data = rpt.insertElement(details, "row", -1, {"hgap": 2})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "value": "labels.left_text", "font-style": "bold", "border": "1", "border-color": 245, 
      "background-color": 245})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "short_text", "value": "head.short_text", "border": "1", "border-color": 218})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "value": "labels.left_text", "font-style": "bold", "border": "1", "border-color": 245, "background-color": 245})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "short_text", "value": "head.short_text", "border": "1", "border-color": 218})

    rpt.insertElement(details, "vgap", -1, {"height": 2})
    row_data = rpt.insertElement(details, "row", -1, {"hgap": 2})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "value": "labels.long_text", "font-style": "bold", "border": "1", "border-color": 245, "background-color": 245})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "long_text", "multiline": "true", "value": "head.long_text", "border": "1", "border-color": 218})

    rpt.insertElement(details, "vgap", -1, {"height": 2})
    rpt.insertElement(details, "hline", -1, {"border-color": 218})
    rpt.insertElement(details, "vgap", -1, {"height": 2})

    row_data = rpt.insertElement(details, "row", -1, {"hgap": 3})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "value": "Barcode (Interleaved 2of5)", "font-style": "bold", "font-size": 10,
      "border": "1", "border-color": 245, "background-color": 245})
    rpt.insertElement(row_data, "barcode",-1,{"code-type": "ITF", "value": "1234567890", "visible-value":1})
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "value": "Barcode (Code 39)", "font-style": "bold", "font-size": 10, 
      "border": "1", "border-color": 245, "background-color": 245})
    rpt.insertElement(row_data, "barcode",-1,{"code-type": "CODE_39", "value": "1234567890ABCDEF", "visible-value":1})

    rpt.insertElement(details, "vgap", -1, {"height": 3})
      
    row_data = rpt.insertElement(details, "row")
    rpt.insertElement(row_data, "cell",-1,{
      "name": "label", "value": "Datagrid Sample", "align": "center", "font-style": "bold", 
      "border": "1", "border-color": 245, "background-color": 245})
    rpt.insertElement(details, "vgap", -1, {"height": 2})

    grid_data = rpt.insertElement(details, "datagrid", -1, {
      "name": "items", "databind": "items", "border": "1", "border-color": 218, "header-background": 245, "footer-background": 245})
    rpt.insertElement(grid_data, "column",-1,{
      "width": "8%", "fieldname": "counter", "align": "right", "label": "labels.counter", "footer": "labels.total"})
    rpt.insertElement(grid_data, "column",-1,{
      "width": "20%", "fieldname": "date", "align": "center", "label": "labels.center_text"})
    rpt.insertElement(grid_data, "column",-1,{
      "width": "15%", "fieldname": "number", "align": "right", "label": "labels.right_text", 
      "footer": "items_footer.items_total", "footer-align": "right"})
    rpt.insertElement(grid_data, "column",-1,{
      "fieldname": "text", "label": "labels.left_text"})

    rpt.insertElement(details, "vgap", -1, {"height": 5})
    rpt.insertElement(details, "html", -1, {"fieldname": "html_text", 
      "html": "<i>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</i> ={{html_text}} Nulla a pretium nunc, in cursus quam."})

    #footer
    footer = rpt.template["elements"]["footer"]
    rpt.insertElement(footer, "vgap", -1, {"height": 2})
    rpt.insertElement(footer, "hline", -1, {"border-color": 218})
    row_data = rpt.insertElement(footer, "row", -1, {"height": 10})
    rpt.insertElement(row_data, "cell",-1,{"value": "Nervatura Report Template", "font-style": "bolditalic"})
    rpt.insertElement(row_data, "cell",-1,{"value": "{{page}}", "align": "right", "font-style": "bold"})
              
    #data
    rpt.setData("labels", {"title": "REPORT TEMPLATE", "left_text": "Short text", "center_text": "Centered text", 
                                          "right_text": "Right text", "long_text": "Long text", "counter": "No.", "total": "Total"})
    rpt.setData("head", {"short_text": "Lorem ipsum dolor", "number": "123 456", "date": "2015.01.01", 
                          "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eu mattis diam, sed dapibus justo. In eget augue nisi. Cras eget odio vel mi vulputate interdum. Curabitur consequat sapien at lacus tincidunt, at sagittis felis lobortis. Aenean porta maximus quam eu porta. Fusce sed leo ut justo commodo facilisis. Vivamus vitae tempor erat, at ultrices enim. Nulla a pretium nunc, in cursus quam."})
    rpt.setData("html_text", "<p><b>Pellentesque eu mattis diam, sed dapibus justo. In eget augue nisi. Cras eget odio vel mi vulputate interdum. Curabitur consequat sapien at lacus tincidunt, at sagittis felis lobortis. Aenean porta maximus quam eu porta. Fusce sed leo ut justo commodo facilisis. Vivamus vitae tempor erat, at ultrices enim.</b></p>")
    rpt.setData("items_footer", {"items_total": "3 703 680"})
    items = []
    for i in range(1, 30):
      items.append({"text": str(i)+". Lorem ipsum dolor", "number": "123 456", "date": "2015.01.01"})
    rpt.setData("items", items)
    rpt.setData("logo", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAFxGAABcRgEUlENBAAAAB3RJTUUH4AcCFiIAfaA8WwAAAeBJREFUSMftlj9IVlEUwH/nfR/+G3QwaPlAg3D5pKkPDIoIghYVm4yCFKlPcGoQdGppa4mm4IJbQdFYRKDgoFR0o5ZwcL5LLoKCoPW+43JfvO/6ns9P0ckDj8c5l3t+55x73rkPzqUFqdRrTe/Tho0CRGeQ2FWA8ilmcgH4CUyeGFSp13DGpvUOoB+YSwDALwBp0VF6jwAKXAbGgIfAYOBi1Rl7oxDknXf56IaBKtDhnzagvcBHzRn7IxOUZFGp12aAaeDKMSv7D+gBdpyxzSBfmnZgGbh2wn5Yc8ZWEyXKOI+lY0C2RGQ9sD1OK/9BvlyjwPUWIZsi8lFVB1K2DWfsl/REKAdle94i5LuIbKnq/cC+mAR/ICMvvUcliMgroFNVb2csT4WGcoGeJbsisqCq4zmBLThj90JjmNFeQbt+i0ReqOpMDiR2xj7KmtYh6E/WZhH5WoqiCWCooTp/SDC3wrPJ7Dr/9Sdn8L5UKt0T5JOqVuNG401BSaedsSt5d08ULFwENoBNVb0Zx/FbRUeA7gLIU2esCWdjU/P41h4HZv3d8Q74DTw7QmP8Baacsa8Pg6S7bBvoSw9BP0yfAJ05gM/AXSDOO5cDGeVdC972ALgDXAJ2gQ/O2Jfnf0RnJvumbKT0gnMTFgAAAABJRU5ErkJggg==")

    rpt.createReport()
    if output == "pdf":
      import binascii
      sys.stdout.write(binascii.b2a_base64(rpt.save2Pdf()))
    elif output == "xml":
      sys.stdout.write(rpt.save2Xml())
    else:
      sys.stdout.write(rpt.save2Html())
예제 #15
0
def report() -> Report:
    return Report()
예제 #16
0
def cli(design, design_name, tag, run_path, output_file, man_report):
    """
    Creates manufacturability and metric summary reports for a given design and OpenLane run.
    """
    # Extracting Configurations
    params = ConfigHandler.get_config(design, tag, run_path)

    # Extracting Report
    report = Report(design, tag, design_name, params, run_path).get_report()

    # Write into file
    with open(output_file, "w") as f:
        f.write(Report.get_header() + "," + ConfigHandler.get_header())
        f.write("\n")
        f.write(report)

    # Adding Extra Attributes computed from configs and reported statistics
    utils.add_computed_statistics(output_file)

    # Tracking Magic DRC, LVS, Antenna Logs:
    run_path = run_path or utils.get_run_path(design, tag)

    _, magic_antenna_report = get_name(
        os.path.join(run_path, "reports", "routing"), "antenna_violators.rpt")
    _, arc_antenna_report = get_name(
        os.path.join(run_path, "reports", "finishing"), "antenna.rpt")
    _, magic_drc_report = get_name(
        os.path.join(run_path, "reports", "finishing"), "drc.rpt")
    _, lvs_report = get_name(os.path.join(run_path, "logs", "finishing"),
                             f"{design_name}.lvs.lef.log")

    printArr = []

    printArr.append("Design Name: " + design_name)
    printArr.append("Run Directory: " + str(run_path))

    splitLine = "----------------------------------------"

    # Summarizing Magic DRC
    drcVioDict = dict()
    cnt = 0
    if os.path.exists(magic_drc_report):
        drcFileOpener = open(magic_drc_report)
        if drcFileOpener.mode == "r":
            drcContent = drcFileOpener.read()
        drcFileOpener.close()

        # design name
        # violation message
        # list of violations
        # Total Count:
        printArr.append(splitLine)
        printArr.append("\nMagic DRC Summary:")
        printArr.append("Source: " + str(magic_drc_report))
        if drcContent is not None:
            drcSections = drcContent.split(splitLine)
            if len(drcSections) > 2:
                for i in range(1, len(drcSections) - 1, 2):
                    drcVioDict[drcSections[i]] = len(
                        drcSections[i + 1].split("\n")) - 2
                for key in drcVioDict:
                    val = drcVioDict[key]
                    cnt += val
                    printArr.append('Violation Message "' + str(key.strip()) +
                                    ' "found ' + str(val) + " Times.")
        printArr.append("Total Magic DRC violations is " + str(cnt))
    else:
        printArr.append("Source not found.")
    # Summarizing LVS
    printArr.append(splitLine)
    printArr.append("\nLVS Summary:")
    printArr.append("Source: " + str(lvs_report))
    if os.path.exists(lvs_report):
        lvsFileOpener = open(lvs_report)
        if lvsFileOpener.mode == "r":
            lvsContent = lvsFileOpener.read()
        lvsFileOpener.close()
        flag = False
        for line in lvsContent.split("\n"):
            if line.find("Total errors =") != -1:
                flag = True
                printArr.append(line)
            elif line.find("net") != -1:
                printArr.append(line)

        if not flag:
            printArr.append("Design is LVS clean.")
    else:
        printArr.append("Source not found.")

    # Summarizing Antennas
    printArr.append(splitLine)
    printArr.append("\nAntenna Summary:")

    if os.path.exists(arc_antenna_report):
        printArr.append("Source: " + str(arc_antenna_report))
        antFileOpener = open(arc_antenna_report)
        if antFileOpener.mode == "r":
            antContent = antFileOpener.read().split("\n")[-5:]
        antFileOpener.close()
        for line in antContent:
            if line.find("violated:") != -1:
                printArr.append(line)
    elif os.path.exists(magic_antenna_report):
        printArr.append("Source: " + str(magic_antenna_report))
        antFileOpener = open(magic_antenna_report)
        if antFileOpener.mode == "r":
            antContent = antFileOpener.read().split("\n")
        antFileOpener.close()
        tot_cnt = 0
        for ant in antContent:
            if len(str(ant).strip()):
                tot_cnt += 1
        printArr.append("Number of pins violated: " + str(tot_cnt))
    else:
        printArr.append("No antenna report found.")

    # write into file
    with open(man_report, "w") as f:
        f.write("\n".join(printArr))
예제 #17
0
 def test_answer_cell_has_answer_a_question_text(self, report: Report):
     (AnswerCellPage().get_answer_cell_text(lambda text: report.soft_assert(
         "Answer a Question" == text, "HW-001",
         "Answer cell text should be 'Answer a Question'")))
예제 #18
0
 def test_card_has_question_mark(self, report: Report):
     (QuestionsPage().tap_answer_cell().get_question_text(
         lambda text: report.soft_assert("?" in text, "HW-000",
                                         "Questions should have a '?'")).
      dismiss_via_swipe())
     assert QuestionsPage()
예제 #19
0
파일: gui.py 프로젝트: tinavas/FSERP
    def add_tabs(self):
        """
        adds new tabs
        """
        global logger
        if ('Inventory', True) in self.access:
            logger.info('initiating Inventory')
            icon = QIcon()
            icon.addPixmap(QPixmap(":/images/inventory.png"), QIcon.Normal,
                           QIcon.Off)
            from inventory.inventory import Inventory

            inventory = Inventory()
            # inventory.inventory_tab_1.setToolTip("Inventory Section")
            self.main_tabWidget.addTab(inventory.inventory_tab_1, icon, "")
            inventory.inventory_detail_tabWidget.setCurrentIndex(0)
        else:
            self.inventory_frame_1.setVisible(False)
        self.progress.setLabelText('Inventory Done....')
        self.progress.setValue(2)

        if ('Billing', True) in self.access:
            logger.info('initiating Billing')
            icon1 = QIcon()
            icon1.addPixmap(QPixmap(":/images/billing.png"), QIcon.Normal,
                            QIcon.Off)
            from billing.billing import Billing

            bill = Billing()
            # bill.billing_tab_2.setToolTip("Billing Section")
            self.main_tabWidget.addTab(bill.billing_tab_2, icon1, "")
            bill.billing_detail_tabWidget.setCurrentIndex(0)
        else:
            self.billing_frame_2.setVisible(False)
        self.progress.setLabelText('Billing Done...')
        self.progress.setValue(3)

        if ('Employee', True) in self.access:
            logger.info('initiating Employee')
            icon2 = QIcon()
            icon2.addPixmap(QPixmap(":/images/employee.png"), QIcon.Normal,
                            QIcon.Off)
            from employee.employee import Employee

            employee = Employee()
            # employee.employee_tab_3.setToolTip("Employee Section")
            self.main_tabWidget.addTab(employee.employee_tab_3, icon2, "")
            employee.employee_detail_tabWidget.setCurrentIndex(0)
        else:
            self.employee_frame_3.setVisible(False)
        self.progress.setLabelText('Employee Done...')
        self.progress.setValue(4)

        if ('Menu', True) in self.access:
            logger.info('initiating Menu')
            icon3 = QIcon()
            icon3.addPixmap(QPixmap(":/images/menu.png"), QIcon.Normal,
                            QIcon.Off)
            from menu.menu import Menu

            menu = Menu()
            # menu.menu_tab_4.setToolTip("Menu Section")
            self.main_tabWidget.addTab(menu.menu_tab_4, icon3, "")
            menu.menu_detail_tabWidget.setCurrentIndex(0)
        else:
            self.menu_frame_4.setVisible(False)
        self.progress.setLabelText('Menu Done....')
        self.progress.setValue(5)

        if ('Report', True) in self.access:
            logger.info('initiating Report')
            icon4 = QIcon()
            icon4.addPixmap(QPixmap(":/images/report.png"), QIcon.Normal,
                            QIcon.Off)
            from report.report import Report

            report = Report()
            # report.report_tab_5.setToolTip("Report Section")
            self.main_tabWidget.addTab(report.report_tab_5, icon4, "")
            report.report_detail_tabWidget.setCurrentIndex(0)
        else:
            self.report_frame_5.setVisible(False)
        self.progress.setLabelText('Report Done....')
        self.progress.setValue(6)

        if ('Waste', True) in self.access:
            logger.info('initiating Waste')
            icon5 = QIcon()
            icon5.addPixmap(QPixmap(":/images/waste.png"), QIcon.Normal,
                            QIcon.Off)
            from waste.waste import Waste

            waste = Waste()
            # waste.waste_tab_6.setToolTip("Waste Section")
            self.main_tabWidget.addTab(waste.waste_tab_6, icon5, "")
            waste.waste_detail_tabWidget.setCurrentIndex(0)
        else:
            self.waste_frame_6.setVisible(False)
        self.progress.setLabelText('Waste Done....')
        self.progress.setValue(7)