def test_set_target_speed(mock_inverter):
    """Test outgoing command called with correct parameter."""

    fridge = Fridge(mock_inverter)
    fridge.set_target_speed(1000)

    mock_inverter.set_target_speed.assert_called_once_with(1000)
def test_set_target_speed(mock_inverter, expected):
    """Test behavior of fridge when current speed matches set speed."""

    fridge = Fridge(mock_inverter)
    fridge.set_target_speed(expected)

    mock_inverter.set_target_speed.assert_called_once_with(expected)
Example #3
0
    def __init__(self):
        ##User Interaction
        #Gui
        self.hideGuiList = False    #Show the consumers in the gui
        self.enableRFID = False     #Enable RFID Reading
        self.allowHiding = False    #Allow a user to hide from the gui consumer list
        self.onlyOneDrink = False   #Hide selection for amount in the gui
        self.drinkLimit = 20        #Max amount of consumptions in the gui (default 20)
        #Web Interface
        self.disableWebIF = False   #Disable Web Interface
        self.disableStats = False   #Disable All Statistics

        ##Payment Incentives
        #Money Limit
        self.autoBlack = True       #Automatically block user if money owed > limit
        self.autoUnblack = True     #Automatically unblock user if money owed < limit
        self.blockLimit = 150       #Money limit for automatic blocking (default 150)
        #Mail Spam
        self.autoAnnoy = False      #Automatically send payment eMails
        self.annoyDays = 20         #Automatically send mails every x days (default 20)
        self.annoyLimit = 100       #Money limit for autoAnnoy (default 100)

        ##Email
        #Login data and server
        self.SMTPserver = "smtp.gmail.com:587"        #Mailserver URL
        self.mailUsername = "******"           #Username for the mailserver
        self.mailPassword = "******"            #Password for the User on the mailserver
        self.mailFromName = "*****@*****.**" #From filed in mail header
        #Standard Texts
        self.singleMessageStandardSubject = u"Baroness - Bierrechnung"
        self.singleMessageStandardText = u"Hallo %%longname%%\ndu hast %%dept%%€ Schulden.\nBitte überweise diesen Betrag an das Konto:\n\n%%if_is_black%%Weil du zu hohe Schulden hast, bist du geschwärzt%%end_if_is_black%%\nLiebe Grüße,\nDein Bierbaron"
        self.masMessageStandardSubject = u"Baroness - Bierrechnung"
        self.masMessageStandardText = u"Hallo %%longname%%\ndu hast %%dept%%€ Schulden.\nBitte überweise diesen Betrag an das Konto:\n\n%%if_is_black%%Weil du zu hohe Schulden hast, bist du geschwärzt%%end_if_is_black%%\nLiebe Grüße,\nDein Bierbaron"

        ##Data Logging
        #Fridge Temperature
        self.fridgeLogging = False  #Log the fridge temperature (connect temp. sensors before enabling)
        self.fridgeTime = 300       #Write fridge temp to file every x seconds
        self.fridgeLength = 30      #Length of data log span in days

        ##Developer Settings
        self.debug = False          #Show debug output in console

        ##Data Logging - Fridges
        self.fridges = list()       #Do not edit

        #Create an antialcoholic fridge (Antikühlschrank) with 3 sensors (top, middle and bottom temp.)
        new_f = Fridge("Antikühlschrank")                      #make new fridge
        new_f.add_sensor(Sensor("Temperatur Oben", "1"))       #add sensor 1 as top
        new_f.add_sensor(Sensor("Temperatur Mitte", "2"))      #add sensor 2 as middle
        new_f.add_sensor(Sensor("Temperatur Unten", "3"))      #add sensor 3 as bottom
        self.fridges.append(new_f)                             #append to the list of fridges

        #Create an alcoholic fridge with 3 sensors             #add more fridges as you like
        new_f = Fridge("Bierkühlschrank")
        new_f.add_sensor(Sensor("Temperatur Oben", "4"))
        new_f.add_sensor(Sensor("Temperatur Mitte", "5"))
        new_f.add_sensor(Sensor("Temperatur Unten", "6"))
        self.fridges.append(new_f)
def test_raises_exception_if_curr_spd_not_target(mock_inverter):
    """Test behavior of fridge when current speed differs from set speed."""

    with pytest.raises(ValueError,
                       message="Unable to confirm fan speed change."):

        fridge = Fridge(mock_inverter)
        fridge.set_target_speed(1500)
def test_raises_exception_when_temp_too_low():
    """Checks if exception is raised if Fridge class is instantiated with temp
    below 1."""

    with pytest.raises(ValueError, message="Ice cream or beer Sir?"):

        wrong_temp_fridge = Fridge("INV2401PH", temp=0)
Example #6
0
 def __init__(self, path=None):
     if path is None:
         self.db_path = self.DEFAULT_DB_PATH
     else:
         self.db_path = path
     self.entries = Fridge(self.db_path)
     self.closed = False
def loaded_fridge_param(request):
    """Create Fridge object for testing with adjustable attributes."""

    inverter, load, temp, base_speed = request.param

    _fridge = Fridge(inverter, load, temp, base_speed)

    return _fridge
Example #8
0
 def test_readonly(self):
     with Fridge(file=self.buf) as fridge:
         fridge['str'] = 'a'
         fridge['int'] = 42
     self.rewind()
     ro = Fridge.readonly(file=self.buf)
     self.assertEqual(ro['str'], 'a')
     self.assertEqual(ro['int'], 42)
     self.assertTrue(ro.closed)
     with self.assertRaises(ValueError):
         fridge.load()
     with self.assertRaises(ValueError):
         fridge.save()
Example #9
0
 def test_close(self):
     fridge = Fridge(file=self.buf)
     fridge['a'] = 'a'
     fridge.close()
     self.assertTrue(fridge.closed)
     self.assertFalse(self.buf.closed)
     self.assertEqual(self.buf.getvalue(), '{"a": "a"}')
     with self.assertRaises(ValueError):
         fridge.load()
     with self.assertRaises(ValueError):
         fridge.save()
Example #10
0
    def test_can_make_recipes(self):

        recipe = Recipe()
        recipe.ingredients.append(Ingredient('peanut butter', None, '5 tablespoons'))
        recipe.ingredients.append(Ingredient('bread', None, '2 slices'))
        recipe.ingredients.append(Ingredient('jelly', None, '5 tablespoons'))

        fridge = Fridge()
        fridge.ingredients['peanut butter'] = Ingredient('peanut butter', None, '1 jar')
        fridge.ingredients['bread'] = Ingredient('bread', None, '1 loaf')
        self.assertFalse(fridge.can_make_recipe(recipe))

        fridge.ingredients['jelly'] = Ingredient('jelly', None, '1 jar')
        self.assertTrue(fridge.can_make_recipe(recipe))
Example #11
0
    def test_get_missing_ingredients(self):

        recipe = Recipe()
        recipe.ingredients.append(Ingredient('peanut butter', None, '5 tablespoons'))
        recipe.ingredients.append(Ingredient('bread', None, '2 slices'))
        recipe.ingredients.append(Ingredient('jelly', None, '5 tablespoons'))

        fridge = Fridge()
        missing_ingredients = fridge.get_missing_ingredients(recipe)
        self.assertEqual(missing_ingredients, ['peanut butter', 'bread', 'jelly'])

        fridge.ingredients['peanut butter'] = Ingredient('peanut butter', None, '1 jar')
        missing_ingredients = fridge.get_missing_ingredients(recipe)
        self.assertEqual(missing_ingredients, ['bread', 'jelly'])

        fridge.ingredients['bread'] = Ingredient('bread', None, '1 loaf')
        missing_ingredients = fridge.get_missing_ingredients(recipe)
        self.assertEqual(missing_ingredients, ['jelly'])

        fridge.ingredients['jelly'] = Ingredient('jelly', None, '1 jar')
        missing_ingredients = fridge.get_missing_ingredients(recipe)
        self.assertEqual(missing_ingredients, [])
Example #12
0
    def __init__(self):
        ##User Interaction
        #Gui
        self.hideGuiList = False  #Show the consumers in the gui
        self.enableRFID = False  #Enable RFID Reading
        self.allowHiding = False  #Allow a user to hide from the gui consumer list
        self.onlyOneDrink = False  #Hide selection for amount in the gui
        self.drinkLimit = 20  #Max amount of consumptions in the gui (default 20)
        #Web Interface
        self.disableWebIF = False  #Disable Web Interface
        self.disableStats = False  #Disable All Statistics

        ##Payment Incentives
        #Money Limit
        self.autoBlack = True  #Automatically block user if money owed > limit
        self.autoUnblack = True  #Automatically unblock user if money owed < limit
        self.blockLimit = 150  #Money limit for automatic blocking (default 150)
        #Mail Spam
        self.autoAnnoy = False  #Automatically send payment eMails
        self.annoyDays = 20  #Automatically send mails every x days (default 20)
        self.annoyLimit = 100  #Money limit for autoAnnoy (default 100)

        ##Email
        #Login data and server
        self.SMTPserver = "smtp.gmail.com:587"  #Mailserver URL
        self.mailUsername = "******"  #Username for the mailserver
        self.mailPassword = "******"  #Password for the User on the mailserver
        self.mailFromName = "*****@*****.**"  #From filed in mail header
        #Standard Texts
        self.singleMessageStandardSubject = u"Baroness - Bierrechnung"
        self.singleMessageStandardText = u"Hallo %%longname%%\ndu hast %%dept%%€ Schulden.\nBitte überweise diesen Betrag an das Konto:\n\n%%if_is_black%%Weil du zu hohe Schulden hast, bist du geschwärzt%%end_if_is_black%%\nLiebe Grüße,\nDein Bierbaron"
        self.masMessageStandardSubject = u"Baroness - Bierrechnung"
        self.masMessageStandardText = u"Hallo %%longname%%\ndu hast %%dept%%€ Schulden.\nBitte überweise diesen Betrag an das Konto:\n\n%%if_is_black%%Weil du zu hohe Schulden hast, bist du geschwärzt%%end_if_is_black%%\nLiebe Grüße,\nDein Bierbaron"

        ##Data Logging
        #Fridge Temperature
        self.fridgeLogging = False  #Log the fridge temperature (connect temp. sensors before enabling)
        self.fridgeTime = 300  #Write fridge temp to file every x seconds
        self.fridgeLength = 30  #Length of data log span in days

        ##Developer Settings
        self.debug = False  #Show debug output in console

        ##Data Logging - Fridges
        self.fridges = list()  #Do not edit

        #Create an antialcoholic fridge (Antikühlschrank) with 3 sensors (top, middle and bottom temp.)
        new_f = Fridge("Antikühlschrank")  #make new fridge
        new_f.add_sensor(Sensor("Temperatur Oben", "1"))  #add sensor 1 as top
        new_f.add_sensor(Sensor("Temperatur Mitte",
                                "2"))  #add sensor 2 as middle
        new_f.add_sensor(Sensor("Temperatur Unten",
                                "3"))  #add sensor 3 as bottom
        self.fridges.append(new_f)  #append to the list of fridges

        #Create an alcoholic fridge with 3 sensors             #add more fridges as you like
        new_f = Fridge("Bierkühlschrank")
        new_f.add_sensor(Sensor("Temperatur Oben", "4"))
        new_f.add_sensor(Sensor("Temperatur Mitte", "5"))
        new_f.add_sensor(Sensor("Temperatur Unten", "6"))
        self.fridges.append(new_f)
Example #13
0
class Blast:
    DEFAULT_DB_PATH = path.expanduser(path.join("~", ".blast_db.json"))

    def __init__(self, path=None):
        if path is None:
            self.db_path = self.DEFAULT_DB_PATH
        else:
            self.db_path = path
        self.entries = Fridge(self.db_path)
        self.closed = False

    def validating_key(func):
        @wraps(func)
        def wrapper(self, args):
            if args.key is not None:
                self.validate_key(args.key)
            try:
                func(self, args)
            except KeyError:
                print("Error: Key not found!")

        return wrapper

    @staticmethod
    def is_valid_key(key):
        reg = r"[\w]+(\.[\w]+)?$"
        return re.match(reg, key)

    def clear(self, key=None):
        if key is not None:
            new_entries = {k: v for k, v in self.entries.items() if not k.startswith(key + ".")}
        else:
            new_entries = {}
        self.entries.clear()
        self.entries.update(new_entries)

    def get_list(self, key=None):
        if key is not None:
            keys = [name for name in self if name.startswith(key + ".")]
        else:
            keys = list(self)
        return sorted(keys)

    @classmethod
    def validate_key(cls, key):
        if not cls.is_valid_key(key):
            print(
                "Error: Invalid key: `{0}`\n".format(key)
                + "Expected format: `<word1>[.<word2>]` "
                + "where words consist of letters, numbers and underscores"
            )
            sys.exit(1)

    ### Commands ###
    @validating_key
    def cmd_get(self, args):
        key = args.key
        val = self[key]
        print(val)

    @validating_key
    def cmd_set(self, args):
        key = args.key
        value = args.value
        if value is None:
            value = sys.stdin.read()
        self[key] = value

    @validating_key
    def cmd_delete(self, args):
        key = args.key
        del self[key]

    @validating_key
    def cmd_clear(self, args):
        key = args.key
        self.clear(key)

    @validating_key
    def cmd_list(self, args):
        key = args.key
        entries = self.get_list(key)
        if not entries:
            print("There are no entries!")
            return
        print("\n".join(entries))

    @validating_key
    def cmd_open(self, args):
        key = args.key
        val = self[key]
        Platform.open(val)

    @validating_key
    def cmd_copy(self, args):
        key = args.key
        val = self[key]
        Platform.copy_to_clipboard(val)
        print(val)

    def cmd_move(self, args):
        key = args.key
        dest = args.dest
        self.validate_key(key)
        self.validate_key(dest)
        self[dest] = self[key]
        del self[key]

    ###^ Commands ^###

    ### Container interface ###
    def __getitem__(self, key):
        return self.entries[key]

    def __setitem__(self, key, value):
        self.entries[key] = value

    def __delitem__(self, key):
        del self.entries[key]

    def __iter__(self):
        return iter(self.entries)

    def __len__(self):
        return len(self.entries)

    def __contains__(self, item):
        return item in self.entries

    ###^ Container interface ^###

    ### Resource management ###
    def close(self):
        self.entries.close()
        self.closed = False

    def __enter__(self):
        return self

    def __exit__(self, *_):
        self.close()
        return False

    def __del__(self):
        self.close()
Example #14
0
from fridge import Fridge

if __name__ == '__main__':
    fridge = Fridge()
Example #15
0
from fridge import Fridge
from detector import Detector
from electronics import Electronics
from absorber import Absorber
from simulated_noise import simulate_noise
from scipy.optimize import minimize
import numpy as np
import matplotlib.pyplot as plt

fSnolab = Fridge("SNOLAB", 20e-3, 145e-3, 900e-3, 4.8, 0)
absorber = Absorber("Si", 1e-3, 38.1e-3, 3e-3, 2.329e3)
eSnolab = Electronics(fSnolab, fSnolab.get_TCP(), fSnolab.get_TMC())
eSLAC = Electronics(fSnolab, fSnolab.get_TMC(), fSnolab.get_TMC(), 5e-3, 6e-3,
                    25e-9, 25e-9, 4e-12)

# Name, fridge, absorber, n_channel
PD2 = Detector("PD2", fSnolab, eSLAC, absorber, 1)
simulate_noise(PD2)
#print(a)

h_fin = 600e-9


def main_func(TES_L, fin_L, overlap_L):
    #l_TES, l_fin, l_overlap = params
    #n_TES = 1185
    #l_overlap = 15e-6
    # TES number is garbage because will be set later.
    det = Detector("PD2", fSnolab, eSLAC, absorber, 1, 69, TES_L, fin_L, h_fin,
                   overlap_L)
    return simulate_noise(det)
def loaded_fridge():
    """Create Fridge object for testing."""

    _fridge = Fridge("INV4403PH", load=10, temp=10, base_speed=1000)

    return _fridge
Example #17
0
from fridge import Fridge

f = Fridge('http://fridge.gr/tag/movies/')

f.get_page_limit()
f.loop_pages()
f.loop_links()