Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/artiq
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: d35bc5a40a5c
Choose a base ref
...
head repository: m-labs/artiq
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: d13b368a6575
Choose a head ref
  • 3 commits
  • 12 files changed
  • 1 contributor

Commits on Oct 20, 2015

  1. Copy the full SHA
    451f39f View commit details
  2. gui: add some tooltips

    sbourdeauducq committed Oct 20, 2015
    Copy the full SHA
    fbe33b7 View commit details
  3. Copy the full SHA
    d13b368 View commit details
6 changes: 6 additions & 0 deletions artiq/frontend/artiq_client.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env python3

import argparse
import logging
import time
import asyncio
import sys
@@ -51,6 +52,10 @@ def get_argparser():
"(defaults to head, ignored without -R)")
parser_add.add_argument("-c", "--class-name", default=None,
help="name of the class to run")
parser_add.add_argument("-v", "--verbose", default=0, action="count",
help="increase logging level of the experiment")
parser_add.add_argument("-q", "--quiet", default=0, action="count",
help="decrease logging level of the experiment")
parser_add.add_argument("file",
help="file containing the experiment to run")
parser_add.add_argument("arguments", nargs="*",
@@ -110,6 +115,7 @@ def _action_submit(remote, args):
sys.exit(1)

expid = {
"log_level": logging.WARNING + args.quiet*10 - args.verbose*10,
"file": args.file,
"class_name": args.class_name,
"arguments": arguments,
13 changes: 11 additions & 2 deletions artiq/gui/explorer.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import asyncio
import logging

from quamash import QtGui, QtCore
from pyqtgraph import dockarea
@@ -234,7 +235,6 @@ def __init__(self, dialog_parent, status_bar, schedule_ctl):

self.datetime = QtGui.QDateTimeEdit()
self.datetime.setDisplayFormat("MMM d yyyy hh:mm:ss")
self.datetime.setCalendarPopup(True)
self.datetime.setDate(QtCore.QDate.currentDate())
self.datetime.dateTimeChanged.connect(self.enable_duedate)
self.datetime_en = QtGui.QCheckBox("Due date:")
@@ -252,7 +252,15 @@ def __init__(self, dialog_parent, status_bar, schedule_ctl):
grid.addWidget(self.pipeline, 2, 1)

self.flush = QtGui.QCheckBox("Flush")
grid.addWidget(self.flush, 2, 2, colspan=2)
self.flush.setToolTip("Flush the pipeline before starting the experiment")
grid.addWidget(self.flush, 2, 2)

self.log_level = QtGui.QComboBox()
for item in "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL":
self.log_level.addItem(item)
self.log_level.setCurrentIndex(1)
self.log_level.setToolTip("Minimum level for log entry production")
grid.addWidget(self.log_level, 2, 3)

submit = QtGui.QPushButton("Submit")
grid.addWidget(submit, 3, 0, colspan=4)
@@ -317,6 +325,7 @@ def init_explist_model(self, init):
async def submit(self, pipeline_name, file, class_name, arguments,
priority, due_date, flush):
expid = {
"log_level": getattr(logging, self.log_level.currentText()),
"repo_rev": None,
"file": file,
"class_name": class_name,
1 change: 1 addition & 0 deletions artiq/gui/log.py
Original file line number Diff line number Diff line change
@@ -102,6 +102,7 @@ def __init__(self):
self.filterbox = QtGui.QComboBox()
for item in "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL":
self.filterbox.addItem(item)
self.filterbox.setToolTip("Display entries at or above this level")
grid.addWidget(self.filterbox, 0, 1)
self.filterbox.currentIndexChanged.connect(self.filter_changed)

4 changes: 1 addition & 3 deletions artiq/language/__init__.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
# Copyright (C) 2014, 2015 Robert Jordens <jordens@gmail.com>

from artiq.language import core, environment, units, scan, logging
from artiq.language import core, environment, units, scan
from artiq.language.core import *
from artiq.language.environment import *
from artiq.language.units import *
from artiq.language.scan import *
from artiq.language.logging import *


__all__ = []
__all__.extend(core.__all__)
__all__.extend(environment.__all__)
__all__.extend(units.__all__)
__all__.extend(scan.__all__)
__all__.extend(logging.__all__)
23 changes: 0 additions & 23 deletions artiq/language/logging.py

This file was deleted.

13 changes: 4 additions & 9 deletions artiq/master/worker.py
Original file line number Diff line number Diff line change
@@ -21,10 +21,6 @@ class WorkerWatchdogTimeout(Exception):
pass


class WorkerException(Exception):
pass


class WorkerError(Exception):
pass

@@ -60,13 +56,14 @@ def watchdog_time(self):
else:
return None

async def _create_process(self):
async def _create_process(self, log_level):
await self.io_lock.acquire()
try:
if self.closed.is_set():
raise WorkerError("Attempting to create process after close")
self.process = await asyncio.create_subprocess_exec(
sys.executable, "-m", "artiq.master.worker_impl",
str(log_level),
stdout=subprocess.PIPE, stdin=subprocess.PIPE)
finally:
self.io_lock.release()
@@ -163,8 +160,6 @@ async def _handle_worker_requests(self):
return True
elif action == "pause":
return False
elif action == "exception":
raise WorkerException
del obj["action"]
if action == "create_watchdog":
func = self.create_watchdog
@@ -208,7 +203,7 @@ async def _worker_action(self, obj, timeout=None):

async def build(self, rid, pipeline_name, wd, expid, priority, timeout=15.0):
self.rid = rid
await self._create_process()
await self._create_process(expid["log_level"])
await self._worker_action(
{"action": "build",
"rid": rid,
@@ -245,7 +240,7 @@ async def write_results(self, timeout=15.0):
timeout)

async def examine(self, file, timeout=20.0):
await self._create_process()
await self._create_process(logging.WARNING)
r = dict()
def register(class_name, name, arguments):
r[class_name] = {"name": name, "arguments": arguments}
7 changes: 4 additions & 3 deletions artiq/master/worker_impl.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import sys
import time
import os
import traceback
import logging

from artiq.protocols import pyon
from artiq.tools import file_import
@@ -160,6 +160,7 @@ def examine(device_mgr, dataset_mgr, file):
def main():
sys.stdout = LogForwarder()
sys.stderr = LogForwarder()
logging.basicConfig(level=int(sys.argv[1]))

start_time = None
rid = None
@@ -217,10 +218,10 @@ def main():
elif action == "terminate":
break
except:
traceback.print_exc()
put_object({"action": "exception"})
logging.error("Worker terminating with exception", exc_info=True)
finally:
device_mgr.close_devices()


if __name__ == "__main__":
main()
2 changes: 1 addition & 1 deletion artiq/protocols/logging.py
Original file line number Diff line number Diff line change
@@ -61,7 +61,7 @@ async def _handle_connection_cr(self, reader, writer):
return
line = line[:-1]
linesplit = line.split(":", 3)
if len(linesplit) != 4:
if len(linesplit) != 2:
logger.warning("received improperly formatted message, "
"dropping connection")
return
2 changes: 2 additions & 0 deletions artiq/test/scheduler.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import unittest
import logging
import asyncio
import sys
import os
@@ -32,6 +33,7 @@ def run(self):

def _get_expid(name):
return {
"log_level": logging.WARNING,
"file": sys.modules[__name__].__file__,
"class_name": name,
"arguments": dict()
4 changes: 3 additions & 1 deletion artiq/test/worker.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import unittest
import logging
import asyncio
import sys
import os
@@ -64,6 +65,7 @@ async def _call_worker(worker, expid):

def _run_experiment(class_name):
expid = {
"log_level": logging.WARNING,
"file": sys.modules[__name__].__file__,
"class_name": class_name,
"arguments": dict()
@@ -85,7 +87,7 @@ def test_simple_run(self):
_run_experiment("SimpleExperiment")

def test_exception(self):
with self.assertRaises(WorkerException):
with self.assertRaises(WorkerError):
_run_experiment("ExceptionTermination")

def test_watchdog_no_timeout(self):
2 changes: 1 addition & 1 deletion examples/master/dataset_db.pyon
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"flopping_freq": 1499.9876804260716}
{"flopping_freq": 1499.9977914479744}
14 changes: 7 additions & 7 deletions examples/master/repository/arguments_demo.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import logging

from artiq import *


@@ -33,10 +35,8 @@ def do(self):
print(self.sc2_enum)


class ArgumentsDemo(EnvExperiment, LogExperiment):
class ArgumentsDemo(EnvExperiment):
def build(self):
self.init_logger()

self.setattr_argument("free_value", FreeValue(None))
self.setattr_argument("number", NumberValue(42e-6,
unit="us", scale=1e-6,
@@ -53,10 +53,10 @@ def build(self):
self.sc2 = SubComponent2(parent=self)

def run(self):
self.logger.error("logging test: error")
self.logger.warning("logging test: warning")
self.logger.info("logging test: info")
self.logger.debug("logging test: debug")
logging.error("logging test: error")
logging.warning("logging test: warning")
logging.info("logging test: info")
logging.debug("logging test: debug")

print(self.free_value)
print(self.boolean)