Example #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
Example #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)
Example #3
0
File: app.py Project: 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)
Example #4
0
  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))
Example #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"
Example #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))
Example #7
0
File: app.py Project: 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))
Example #8
0
File: app.py Project: 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))
Example #9
0
File: app.py Project: 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)
Example #10
0
File: app.py Project: 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)
Example #11
0
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)
Example #12
0
  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)
Example #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)
Example #14
0
@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()
Example #15
0
def hold_press_action():
    global timer
    timer = None
    log("flic hold")
    get("http://localhost/api/" + get_commands()['hold'])
Example #16
0
def double_click_action():
    global timer
    timer = None
    log("flic double")
    get("http://localhost/api/" + get_commands()['double'])
Example #17
0
def _schedule_handler():
    try:
        _schedule()
    except Exception as e:
        log("General scheduler error:\n", traceback.format_exc())
        _schedule_handler()
Example #18
0
def set(command):
    try:
        return _set(command)
    except Exception as e:
        log("General light set error:\n", traceback.format_exc())
        return "Failed"
Example #19
0
 def connect(self):
     try:
         self.controller = flux_led.WifiLedBulb(self.__ipaddr)
     except socket.timeout as e:
         log("Magic Light error: Connection")
Example #20
0
File: utils.py Project: sjf/data
def run(cmd):
    log('Running', cmd)
    res = os.system(cmd)
    if res != 0:
        sys.exit(res)