コード例 #1
0
def first_event_time() -> datetime.datetime:
	try:
		events = get_events()
	except googleapiclient.errors.HttpError:
		log("Error getting calendar events")
		return None
	for event in events:
		if 'dateTime' in event['start'].keys():
			event['start']['dateTime'] = parse(event['start']['dateTime'])
		else:
			event['start']['dateTime'] = parse(event['start']['date'] + "T00:00:00Z")
	events.sort(key=lambda event: event['start']['dateTime'])

	firstTime = None

	if datetime.datetime.now().hour <= 5:
		day = datetime.datetime.now().date()
	else:
		day = datetime.datetime.now().date() + datetime.timedelta(days=1)

	for event in events:
		time = event['start']['dateTime']
		if day == time.date():
			firstTime = time
			break

	return firstTime
コード例 #2
0
def go(name):
    """Redirects to a link."""
    url = data.get_url(name)
    if not url:
        return redirect('/.edit?name=' + urlquote(name))
    qs = (request.query_string or '').encode('utf-8')
    if qs:
        url += ('&' if '?' in url else '?') + qs
    data.log('redirect', name, url)
    data.update_count(name)
    return redirect(url)
コード例 #3
0
ファイル: app.py プロジェクト: zestyping/go
def go(name):
    """Redirects to a link."""
    url = data.get_url(name)
    if not url:
        return redirect('/.edit?name=' + urlquote(name))
    qs = (request.query_string or '').encode('utf-8')
    if qs:
        url += ('&' if '?' in url else '?') + qs
    data.log('redirect', name, url)
    data.update_count(name)
    return redirect(url)
コード例 #4
0
ファイル: data.py プロジェクト: esel7353/ephys
  def test_funcs_multi(self):
    pi = math.pi

    # sin family
    self.assertQuantity(data.sin(Quantity( (0,pi/2), (2,2))), (0,1), (2,0)) 
    self.assertQuantity(data.sinh(Quantity((0,1), (2,2))), (0, math.sinh(1)), (2, math.cosh(1)*2)) 
    self.assertQuantity(data.asin(Quantity((0,0.5), (2,2))), (0,math.asin(0.5)), (2,2/math.sqrt(1-0.5**2))) 
    self.assertQuantity(data.asinh(Quantity((0,1), (2,2))), (0,math.asinh(1)), (2,2/math.sqrt(1+1**2))) 

    # cos family
    self.assertQuantity(data.cos(Quantity((0,pi/2), (2,2))), (1,0), (0,-2)) 
    self.assertQuantity(data.cosh(Quantity((0,1), (2,2))), (1,math.cosh(1)), (0,math.sinh(1)*2)) 
    self.assertQuantity(data.acos(Quantity((0,0.5), (2,2))), (math.acos(0),math.acos(0.5)), (-2,-2/math.sqrt(1-0.5**2)))
    self.assertQuantity(data.acosh(Quantity((2,3), (2,2))), (math.acosh(2), math.acosh(3)), (2/math.sqrt(2**2-1),2/math.sqrt(3**2-1)))

    # tan family
    self.assertQuantity(data.tan(Quantity((0,1), (2,2))), (0,math.tan(1)), (2,2/math.cos(1)**2))
    self.assertQuantity(data.tanh(Quantity((0,1), (2,2))), (0,math.tanh(1)), (2,2/math.cosh(1)**2)) 
    self.assertQuantity(data.atan(Quantity((0,1), (2,2))), (0, math.atan(1)), (2,2/(1+1**2))) 
    self.assertQuantity(data.atan2(Quantity((0,1), (2,2)), Quantity((1,1), (0,0))), (0,math.atan(1)), (2,2/(1+1**2))) 
    self.assertQuantity(data.atanh(Quantity((0,0.5), (2,2))), (0,math.atanh(0.5)), (2,2/(1-0.5**2)))

    #misc
    self.assertQuantity(data.sqrt(Quantity((1,4), (2,2))), (1,2), (1,1/2))
    self.assertQuantity(data.exp(Quantity((1,4), (2,2))), (math.e, math.e**4), (2 * math.e,2*math.e**4))
    self.assertQuantity(data.log(Quantity((1,4), (2,2))), (0, math.log(4)), (2,1/2))
コード例 #5
0
def _set(command):
    main_light, led_light = connect_lights()
    command = command.split('/')
    if len(command) == 2:
        if command[1] == 'get':
            if command[0] == 'mode':
                return data_file.get('mode')
            if command[0] == 'on':
                return get_on()
    if len(command) == 3:
        if command[2] == 'get':
            colours = get_palette()[command[1]]
            return colours
    if command[0] == 'mode':
        mode = command[1]
        data_file.set('mode', mode)
        if len(command) < 3:
            command = ['auto']
        else:
            command = command[2:]
    if command[0] == 'toggle':
        if get_on() == 2:
            command[0] = 'off'
        if get_on() < 2:
            command[0] = 'on'
    if command[0] == 'on':
        main_light.turn_on()
        led_light.turn_on()
    if command[0] == 'off':
        main_light.turn_off()
        led_light.turn_off()
    if command[0] == 'auto':
        main_light.set_colour()
        led_light.set_colour()
    if command[0] == 'silent':
        pass  # Don't update
    if command[0] == 'reconnect':
        connect_lights()
    else:
        log("Lights: ", command)

    return "Done"
コード例 #6
0
def save():
    """Creates or edits a link in the database."""
    original_name = request.form.get('original_name', '').lstrip('.')
    name = request.form.get('name', '').lstrip('.')
    url = request.form.get('url', '')
    if not name:
        return make_error_response('The shortcut must be made of letters.')
    if not (url.startswith('http://') or url.startswith('https://')):
        return make_error_response('URLs must start with http:// or https://.')
    try:
        if original_name:
            if not data.update_link(original_name, name, url):
                return make_error_response(
                    'Someone else renamed go/{}.'.format(original_name))
            data.log('update', name, url)
        else:
            data.add_link(name, url)
            data.log('create', name, url)
    except data.IntegrityError:
        return make_error_response('go/{} already exists.'.format(name))
    return redirect('/.edit?name=' + urlquote(name))
コード例 #7
0
ファイル: app.py プロジェクト: zestyping/go
def save():
    """Creates or edits a link in the database."""
    original_name = request.form.get('original_name', '').lstrip('.')
    name = request.form.get('name', '').lstrip('.')
    url = request.form.get('url', '')
    if not name:
        return make_error_response('The shortcut must be made of letters.')
    if not (url.startswith('http://') or url.startswith('https://')):
        return make_error_response('URLs must start with http:// or https://.')
    try:
        if original_name:
            if not data.update_link(original_name, name, url):
                return make_error_response(
                    'Someone else renamed go/{}.'.format(original_name))
            data.log('update', name, url)
        else:
            data.add_link(name, url)
            data.log('create', name, url)
    except data.IntegrityError:
        return make_error_response('go/{} already exists.'.format(name))
    return redirect('/.edit?name=' + urlquote(name))
コード例 #8
0
ファイル: app.py プロジェクト: waveremit/go
def save():
    """Creates or edits a link in the database."""
    original_name = request.form.get('original_name', '').lstrip('.')
    name = request.form.get('name', '').lstrip('.')
    url = request.form.get('url', '')
    if not name:
        return make_error_response('The shortcut must be made of letters.')
    if not re.match(r'^(http|https)://', url):
        return make_error_response('URLs must start with http:// or https://.')
    if request.form.get('delete'):
        data.delete_link(original_name)
        data.log('delete', original_name, url)
        return redirect('/')
    try:
        if original_name:
            if not data.update_link(original_name, name, url):
                return make_error_response(
                    'Someone else renamed go.wave.com/%s.' % original_name)
            data.log('update', name, url)
        else:
            data.add_link(name, url)
            data.log('create', name, url)
    except data.IntegrityError:
        return make_error_response('go.wave.com/%s already exists.' % name)
    return redirect('/.edit?name=' + urlquote(name))
コード例 #9
0
ファイル: app.py プロジェクト: waveremit/go
def go(name):
    """Redirects to a link."""
    url = data.get_url(name) or data.get_url(normalize(name))
    # If "foo/bar/baz" is not found, try "foo/bar" and append "/baz";
    # if that's not found, try "foo" and append "/bar/baz".
    suffix = ''
    while not url and '/' in name:
        name, part = name.rsplit('/', 1)
        suffix = '/' + part + suffix
        url = data.get_url(name) or data.get_url(normalize(name))
    if not url:
        return redirect('/.edit?name=' + urlquote(name + suffix))
    if '%s' in url:
        url = url.replace('%s', urlquote(suffix.lstrip('/')))
    else:
        url += suffix
    qs = (request.query_string or '').encode('utf-8')
    if qs:
        url += ('&' if '?' in url else '?') + qs
    data.log('redirect', name, url)
    data.update_count(name)
    return redirect(url)
コード例 #10
0
ファイル: app.py プロジェクト: waveremit/go
def go(name):
    """Redirects to a link."""
    url = data.get_url(name) or data.get_url(normalize(name))
    # If "foo/bar/baz" is not found, try "foo/bar" and append "/baz";
    # if that's not found, try "foo" and append "/bar/baz".
    suffix = ''
    while not url and '/' in name:
        name, part = name.rsplit('/', 1)
        suffix = '/' + part + suffix
        url = data.get_url(name) or data.get_url(normalize(name))
    if not url:
        return redirect('/.edit?name=' + urlquote(name + suffix))
    if '%s' in url:
        url = url.replace('%s', urlquote(suffix.lstrip('/')))
    else:
        url += suffix
    qs = (request.query_string or '').encode('utf-8')
    if qs:
        url += ('&' if '?' in url else '?') + qs
    data.log('redirect', name, url)
    data.update_count(name)
    return redirect(url)
コード例 #11
0
ファイル: schedule.py プロジェクト: j-waters/Home-Manager
def _schedule():
    log("Scheduler Started")
    while True:
        with open('scheduler_test', 'w') as f:
            f.write(str(datetime.now()))
        doLog = True
        if data_file.get('suspend_schedule'):
            continue
        cur_time = datetime.now()
        for trigger in get_schedules():  # type: dict
            days = trigger["day"]
            if "all" in days or cur_time.strftime("%a") in days:
                if trigger["time"] == "sunset":
                    t = sun.get_sunset_time().astimezone(tz=tzlocal()).replace(
                        tzinfo=None)
                    #print("sunset", t)
                elif trigger["time"][0] == "M":
                    doLog = False
                    interval = int(trigger["time"][1:])
                    t = cur_time
                    while t.minute % interval != 0:
                        t += timedelta(seconds=5)
                elif trigger["time"][0] == "H":
                    interval = int(trigger["time"][1:])
                    t = cur_time
                    while t.hour % interval != 0:
                        t += timedelta(seconds=5)
                else:
                    t = parse(trigger["time"])
                t += timedelta(seconds=int(trigger.get('offset', 0)))
                #print(trigger, t)
                #print("{} triggers at {} in {} seconds".format(trigger["command"], t, (t - cur_time).seconds))
                if abs((t - cur_time).seconds) < 10:
                    if doLog:
                        log(trigger, 'triggered at', t)
                    try:
                        get("http://localhost/api/" + trigger["command"])
                    except:
                        log("Failed to send command")
        time.sleep(5)
コード例 #12
0
ファイル: data.py プロジェクト: esel7353/ephys
  def test_funcs(self):
    pi = math.pi

    # sin family
    self.assertQuantity(data.sin(Quantity(0, 2)), 0, 2) 
    self.assertQuantity(data.sin(Quantity(pi/2, 2)), 1, 0) 
    self.assertAlmostEqual(data.sin(      pi/2 ),    1) 

    self.assertQuantity(data.sinh(Quantity(0, 2)), 0, 2) 
    self.assertQuantity(data.sinh(Quantity(1, 2)), math.sinh(1), math.cosh(1)*2) 
    self.assertAlmostEqual(  data.sinh(    1    ), math.sinh(1))

    self.assertQuantity(data.asin(Quantity(0, 2)), 0, 2) 
    self.assertQuantity(data.asin(Quantity(0.5, 2)), math.asin(0.5), 2/math.sqrt(1-0.5**2)) 
    self.assertAlmostEqual(  data.asin(    0.5  ),   math.asin(0.5))

    self.assertQuantity(data.asinh(Quantity(0, 2)), 0, 2) 
    self.assertQuantity(data.asinh(Quantity(1, 2)), math.asinh(1), 2/math.sqrt(1+1**2)) 
    self.assertAlmostEqual(  data.asinh(    1    ), math.asinh(1))

    # cos family
    self.assertQuantity(data.cos(Quantity(0, 2)), 1, 0) 
    self.assertQuantity(data.cos(Quantity(pi/2, 2)), 0, -2) 
    self.assertAlmostEqual(  data.cos(    pi/2 ),    0)


    self.assertQuantity(data.cosh(Quantity(0, 2)), 1, 0) 
    self.assertQuantity(data.cosh(Quantity(1, 2)), math.cosh(1), math.sinh(1)*2) 
    self.assertAlmostEqual(  data.cosh(    1    ), math.cosh(1))


    self.assertQuantity(data.acos(Quantity(0, 2)), math.acos(0), -2) 
    self.assertQuantity(data.acos(Quantity(0.5, 2)), math.acos(0.5), -2/math.sqrt(1-0.5**2)) 
    self.assertAlmostEqual(  data.acos(         0.5  ),   math.acos(0.5))


    self.assertQuantity(data.acosh(Quantity(2, 2)), math.acosh(2), 2/math.sqrt(2**2-1))
    self.assertQuantity(data.acosh(Quantity(3, 2)), math.acosh(3), 2/math.sqrt(3**2-1))
    self.assertAlmostEqual(  data.acosh(    3    ), math.acosh(3))


    # tan family
    self.assertQuantity(data.tan(Quantity(0, 2)), 0, 2) 
    self.assertQuantity(data.tan(Quantity(1, 2)), math.tan(1), 2/math.cos(1)**2) 
    self.assertAlmostEqual(  data.tan(    1    ), math.tan(1))


    self.assertQuantity(data.tanh(Quantity(0, 2)), 0, 2) 
    self.assertQuantity(data.tanh(Quantity(1, 2)), math.tanh(1), 2/math.cosh(1)**2) 
    self.assertAlmostEqual(  data.tanh(    1    ), math.tanh(1))


    self.assertQuantity(data.atan(Quantity(0, 2)), 0, 2) 
    self.assertQuantity(data.atan(Quantity(1, 2)), math.atan(1), 2/(1+1**2)) 
    self.assertAlmostEqual(  data.atan(         1    ), math.atan(1))

    self.assertQuantity(data.atan2(Quantity(0, 2), Quantity(1, 0)), 0, 2) 
    self.assertQuantity(data.atan2(Quantity(1, 2), Quantity(1, 0)), math.atan(1), 2/(1+1**2)) 
    self.assertAlmostEqual(  data.atan2(         1, 1    ), math.atan(1))
    self.assertQuantity(data.atan2(Quantity(2, 2), Quantity(-1, 1)), math.atan2(2, -1), math.sqrt(8) / (1+2**2))

    self.assertQuantity(data.atanh(Quantity(0, 2)), 0, 2)
    self.assertQuantity(data.atanh(Quantity(0.5, 2)), math.atanh(0.5), 2/(1-0.5**2))
    self.assertAlmostEqual(  data.atanh(    0.5    ), math.atanh(0.5))

    #misc
    self.assertQuantity(data.sqrt(Quantity(1, 2)), 1, 1)
    self.assertQuantity(data.sqrt(Quantity(4, 2)), 2, 1/2)
    self.assertAlmostEqual(data.sqrt(      4    ), 2)
    self.assertQuantity(data.sqrt(Quantity(1, 2, 'm^2')), 1, 1, self.METER)

    self.assertQuantity(data.exp(Quantity(1, 2)), math.e, 2 * math.e)
    self.assertQuantity(data.exp(Quantity(4, 2)), math.e**4, 2*math.e**4)
    self.assertAlmostEqual(data.exp(      4    ), math.e**4)

    self.assertQuantity(data.log(Quantity(1, 2)), 0, 2)
    self.assertQuantity(data.log(Quantity(4, 2)), math.log(4), 1/2)
    self.assertAlmostEqual(data.log(      4    ), math.log(4))

    self.assertQuantity(data.log2(Quantity(1, 2)), 0, 2/math.log(2))
    self.assertQuantity(data.log2(Quantity(4, 2)), 2, 2/(math.log(2) * 4))
    self.assertAlmostEqual(data.log2(      4    ), 2)

    self.assertQuantity(data.log10(Quantity(1, 2)), 0, 2/math.log(10))
    self.assertQuantity(data.log10(Quantity(100, 2)), 2, 2/(math.log(10) * 100))
    self.assertAlmostEqual(data.log10(      100    ), 2)
コード例 #13
0
def evolution():
    '''A star is initialised in the form of proton number, neutron
    number, and mass number matrices. Every iteration utilises weighted
    probabilities in randomising the movement of elements under gravity,
    as well as in determining the nuclear fusion reactions that occur.

    The matrix dimensions may be modified under the variable 'dim'.
    '''

    # ignores runtime warning for handled ZeroDivisionError
    np.seterr(divide='ignore')

    # square matrix dimensions; minimum = 10
    dim = 20

    # proton number, neutron number, mass number matrices
    z, n, a = matrix.generate(dim)
    # energy matrix
    en = np.zeros((len(a), len(a)))
    # data handling arrays
    elm = np.array([1, 2, 6, 7, 8])
    stack = np.zeros(len(elm))
    # fusion rate array
    rate = [0]
    # total atomic mass
    print('\nMass: %d' % a.sum())

    # output images directory
    if not os.path.exists('images'):
        os.mkdir('images')

    # initial system
    pos = matrix.positions(a)
    cm = matrix.centre_of_mass(a, pos)
    dens = density.matrix(a)
    density.plot(dens, 'initial')

    # data handling
    comp = data.composition(z, pos)
    for i in range(len(stack)):
        for j in range(len(comp)):
            if elm[i] == comp[j, 0]:
                stack[i] = comp[j, 1]
                break
        else:
            stack[i] = 0
    elm = np.vstack((elm, stack))
    data.log(comp, 'w', 0)

    # control variables
    flag1 = True
    flag2 = False
    iter = 0
    print('\nIterations:\n')
    while flag1:
        iter += 1
        print(iter, end='. ')

        # gravitation
        pos = matrix.positions(a)
        grav = gravity.force(a, pos)
        grav *= 1 - 0.99 * en.sum()
        for i in range(len(grav)):
            r = np.random.rand(1)
            j, k = pos[i]

            if r <= abs(grav[i, 0]):
                dir = int(grav[i, 0] / abs(grav[i, 0]))
                if a[j + dir, k] < a[j, k]:
                    z[j, k], z[j + dir, k] = z[j + dir, k], z[j, k]
                    n[j, k], n[j + dir, k] = n[j + dir, k], n[j, k]
            elif r <= np.abs(grav[i]).sum():
                dir = int(grav[i, 1] / abs(grav[i, 1]))
                if a[j, k + dir] < a[j, k]:
                    z[j, k], z[j, k + dir] = z[j, k + dir], z[j, k]
                    n[j, k], n[j, k + dir] = n[j, k + dir], n[j, k]
            a = z + n

        # nuclear fusion
        ctr = 0
        pos = matrix.positions(a)
        cm = matrix.centre_of_mass(a, pos)
        c_pos, c_temp = matrix.core(a, pos, cm)
        if not flag2:
            if c_temp > 7:
                flag2 = True
        else:
            for i in c_pos:
                j = i.copy()
                r = np.random.randint(2, size=2)
                # r[0] determines the axis (horizontal: 0, vertical: 1)
                # r[1] determines the direction along the axis
                dir = (-1)**r[1]
                if r[0]:
                    j[0] += dir
                else:
                    j[1] += dir
                p1 = [z[i[0], i[1]], n[i[0], i[1]]]
                p2 = [z[j[0], j[1]], n[j[0], j[1]]]
                try:
                    f = c_temp / (p1[0] * p2[0])
                    if f > 1:
                        f = 1
                except ZeroDivisionError:
                    f = 1
                e = en[i[0], i[1]]
                nr = nuclear.reaction(p1, p2, f, e)
                z[i[0], i[1]] = nr[0]
                n[i[0], i[1]] = nr[1]
                z[j[0], j[1]] = nr[2]
                n[j[0], j[1]] = nr[3]
                a = z + n
                en[i[0], i[1]] = nr[4]

                if [p1, p2] != [[nr[0], nr[1]], [nr[2], nr[3]]]:
                    ctr += 1
        rate.append(ctr)

        # data handling
        comp = data.composition(z, pos)
        for i in range(len(stack)):
            for j in range(len(comp)):
                if elm[0, i] == comp[j, 0]:
                    stack[i] = comp[j, 1]
                    break
            else:
                stack[i] = 0
        elm = np.vstack((elm, stack))
        data.log(comp, 'a', iter)

        # iterates till H + He (stellar fuel) drops below 5.00%
        fuel = stack[0] + stack[1]
        print('Fuel: %.2f%%\n' % fuel)
        if fuel < 5:
            flag1 = False

    # final system
    pos = matrix.positions(a)
    cm = matrix.centre_of_mass(a, pos)
    dens = density.matrix(a)
    density.plot(dens, 'final')
    density.profile(dens, cm)
    data.plot(elm[1:], iter + 1)
    nuclear.plot_rate(rate, iter + 1)
コード例 #14
0
ファイル: core.py プロジェクト: j-waters/Home-Manager
@app.route('/api/scheduler/<status>')
def scheduler_status(status):
    if status in ['suspend', 'off' 'false']: status = True
    if status in ['run', 'on', 'true']: status = False
    data_file.set('suspend_schedule', status)
    return "Done"


@app.route('/camera')
def camera_stream():
    req = requests.get('http://192.168.1.10/?action=stream', stream=True)
    return flask.Response(req.iter_content(chunk_size=1024),
                          content_type=req.headers['content-type'])


@app.route('/api/say/<message>')
def broadcast(message):
    message = message.replace("_", " ")
    return message


#@app.route('/api/phone/battery/<percentage>')

log("========= STARTED =========")
start_scheduler()

if __name__ == "__main__":
    app.run(host='192.168.1.4', debug=True, port=4000)
    #Popen(['npm', 'run', 'start'], cwd=path.dirname(path.realpath(__file__)) + '/assistant-relay')
    #input()
コード例 #15
0
def hold_press_action():
    global timer
    timer = None
    log("flic hold")
    get("http://localhost/api/" + get_commands()['hold'])
コード例 #16
0
def double_click_action():
    global timer
    timer = None
    log("flic double")
    get("http://localhost/api/" + get_commands()['double'])
コード例 #17
0
ファイル: schedule.py プロジェクト: j-waters/Home-Manager
def _schedule_handler():
    try:
        _schedule()
    except Exception as e:
        log("General scheduler error:\n", traceback.format_exc())
        _schedule_handler()
コード例 #18
0
def set(command):
    try:
        return _set(command)
    except Exception as e:
        log("General light set error:\n", traceback.format_exc())
        return "Failed"
コード例 #19
0
 def connect(self):
     try:
         self.controller = flux_led.WifiLedBulb(self.__ipaddr)
     except socket.timeout as e:
         log("Magic Light error: Connection")
コード例 #20
0
ファイル: utils.py プロジェクト: sjf/data
def run(cmd):
    log('Running', cmd)
    res = os.system(cmd)
    if res != 0:
        sys.exit(res)