Пример #1
0
def env_test_01():
    admin_user = User(name="Administrator",
                      role=ROLE_ADMIN,
                      access_code="1234")
    admin_user.add_registration_code("1234")
    session.add_all([
        admin_user,
        User(name="Chuck Norris", role=ROLE_USER, access_code="1111")
    ])
    print(" - Created users")

    z1 = Zone(name="No delay", description="Alert with no delay")
    z2 = Zone(name="Tamper",
              disarmed_delay=0,
              away_alert_delay=None,
              stay_alert_delay=None,
              description="Sabotage alert")
    z3 = Zone(name="Away/stay delayed",
              away_alert_delay=5,
              stay_alert_delay=5,
              description="Alert delayed when armed AWAY or STAY")
    z4 = Zone(name="Stay delayed",
              stay_alert_delay=5,
              description="Alert delayed when armed STAY")
    z5 = Zone(name="Stay",
              stay_alert_delay=None,
              description="No alert when armed STAY")
    session.add_all([z1, z2, z3, z4, z5])
    print(" - Created zones")

    session.add_all(SENSOR_TYPES)
    print(" - Created sensor types")

    s1 = Sensor(channel=0,
                sensor_type=SENSOR_TYPES[0],
                zone=z3,
                description="Garage")
    s2 = Sensor(channel=1,
                sensor_type=SENSOR_TYPES[2],
                zone=z5,
                description="Test room")
    s3 = Sensor(channel=2,
                sensor_type=SENSOR_TYPES[1],
                zone=z2,
                description="Tamper")
    session.add_all([s1, s2, s3])
    print(" - Created sensors")

    kt1 = KeypadType(1, "DSC", "DSC keybus (DSC PC-1555RKZ)")
    kt2 = KeypadType(2, "WIEGAND", "Wiegand keypad")
    session.add_all([kt1, kt2])
    print(" - Created keypad types")

    k1 = Keypad(keypad_type=kt1)
    session.add_all([k1])
    print(" - Created keypads")

    session.commit()
Пример #2
0
def update_zones():
    # Request data about zones
    url = 'https://datos.cdmx.gob.mx/api/records/1.0/download/?dataset=alcaldias'
    r = requests.get(url, allow_redirects=True)

    decoded_content = r.content.decode('utf-8')

    cr = csv.reader(decoded_content.splitlines(), delimiter=';')

    # Skips headers
    next(cr)

    # Remove old data
    Zone.query.delete()

    # Insert all records
    for row in cr:
        shape = geojson.loads(row[5])
        geom = from_shape(asShape(shape), srid=4326)
        newZone = Zone(
            name=row[0],
            shape=geom,
        )

        db.session.add(newZone)
        db.session.commit()
Пример #3
0
    def list_zones(self, limit):
        frontier = PaginationFrontier([self.tenant])
        found_zones = []

        while not frontier.is_empty():
            link, tenant = frontier.pop_next_zone_link()
            if not link:
                return found_zones

            path, params = frontier.parse_url(link)
            params['sort_key'] = 'id'

            print "%s: GET %s" % (self.tenant.id, link)
            resp = self.client.get(path, params=params)
            check_resp(resp)

            zones = resp.json()['zones']
            links = resp.json()['links']

            if 'next' in links:
                next_link = links['next']
                frontier.add_zone_link(next_link, tenant)

            for z in zones:
                zone = Zone(z['id'], z['name'])
                found_zones.append(zone)
                if len(found_zones) >= limit:
                    return found_zones

        return found_zones
Пример #4
0
	def handle_zhejiang_zone(self):
		from data import zhejiang_zone
		for k, v in zhejiang_zone.items():
			if v:
				for v_k, v_v in v.items():
					zone = Zone(k, v_k, v_v)
					self.db.add(zone)
		self.db.commit()
		print('insert zhejiang zone is ok!')
Пример #5
0
def create_zone():
    zone = Zone()
    zone.update(request.json)
    if not zone.description:
        zone.description = zone.name
    db.session.add(zone)
    db.session.commit()
    IPCClient().update_configuration()
    return jsonify(zone.serialize)
Пример #6
0
    def create_zone(self):
        zone_name, email = random_zone_email()
        payload = { "name": zone_name, "email": email, "ttl": 7200 }

        resp = self.client.post_zone(data=json.dumps(payload))
        check_resp(resp)

        zone = Zone(resp.json()['id'], resp.json()['name'])
        print '%s: Created zone %s' % (self.tenant.id, zone.name)
        return zone
Пример #7
0
    def __init__(self, parent, ctx, args, guild, user, channel):
        """
        Command handler for UndoCommand

        Parameters
        ----------
        parent : DreamcraftHandler
            The handler for Dreamcraft Bot commands and subcommands
        ctx : object(Context)
            The Discord.Context object used to retrieve and send information to Discord users
        args : array(str)
            The arguments sent to the bot to parse and evaluate
        guild : Guild
            The guild object containing information about the server issuing commands
        user : User
            The user database object containing information about the user's current setttings, and dialogs
        channel : Channel
            The channel from which commands were issued

        Returns
        -------
        UndoCommand - object for processing undo/redo commands and subcommands
        """

        self.parent = parent
        self.new = parent.new
        self.delete = parent.delete
        self.ctx = ctx
        self.args = args[1:]
        self.guild = guild
        self.user = user
        self.channel = channel
        self.command = self.args[0].lower() if len(self.args) > 0 else 'undo'
        self.scenario = Scenario().get_by_id(
            self.channel.active_scenario
        ) if self.channel and self.channel.active_scenario else None
        self.sc = Scene().get_by_id(
            self.channel.active_scene
        ) if self.channel and self.channel.active_scene else None
        self.zone = Zone().get_by_id(
            self.channel.active_zone
        ) if self.channel and self.channel.active_zone else None
        self.char = Character().get_by_id(
            self.user.active_character
        ) if self.user and self.user.active_character else None
Пример #8
0
def addZones(db, zonesList):
	res = []
	for zone in zonesList:
		z = Zone(name=zone[0])

		map_ = Map.query.filter_by(id=zone[1]).first()
		if map_ != None:
			print ('Added to {0} zone {1}'.format(map_.name, z.name))
			map_.zones.append(z)
			db.session.add(map_)

		db.session.add(z)
		db.session.flush()
		res.append(z.id)

		print ('Added zone {0}'.format(zone[0]))

	db.session.commit()
	return res
Пример #9
0
def _gen_zone(zone_name, latency, pricing, datacenters_map):
    supported_cloud_providers = set({"aws", "gcp"})

    zone_parts = zone_name.split("-")

    if len(zone_parts) < 2:
        print("Zone must be complete - ", zone_parts)
        return None

    cp_name = zone_parts[0]
    if cp_name not in supported_cloud_providers:
        print("Unsupported cloud provider - ", cp_name)
        return None
    cp = CloudProvider(cp_name)
    region_name = "-".join(zone_parts[1:len(zone_parts)])
    region_location = datacenters_map[cp_name + "-" + region_name]["location"]
    region = Region(region_name, region_location)
    zone = Zone("1", region, cp, latency, pricing[cp_name])

    return zone
Пример #10
0
    def gather_zones(self):
        if self.done():
            LOG.debug("we're done!")
            self.done_gathering.fire()
            return

        # grab a list zones link from our 'frontier' of links
        link, tenant = self.frontier.pop_next_zone_link()
        if not link:
            return
        # we want to be careful to retain the 'marker=<uuid>' that's used to
        # grab different pages of a paginated list
        path, params = self.frontier.parse_url(link)
        params['sort_key'] = 'id'

        client = self.designate_client.as_user(tenant)
        resp = client.get(path, name='/v2/zones', params=params)
        if not resp.ok:
            LOG.error("failed to list zones while gathering zones")
            return

        zones = resp.json()['zones']
        links = resp.json()['links']
        LOG.info("%s -- fetched %s zones for tenant %s",
                 resp.request.url, len(zones), tenant)
        if 'next' in links:
            self.frontier.add_zone_link(links['next'], tenant)
        else:
            LOG.debug("no more zone 'next' links to pursue")
        for z in zones:
            zone = Zone(z['id'], z['name'])

            # be sure to avoid storing recordsets on zones we're going to delete
            if len(tenant.data.zones_for_get) <= len(tenant.data.zones_for_delete):
                tenant.data.zones_for_get.append(zone)

                path, _ = self.frontier.parse_url(z['links']['self'])
                recordset_link = "{0}/recordsets".format(path)
                self.frontier.add_recordset_link(zone, recordset_link, tenant)
            else:
                tenant.data.zones_for_delete.append(zone)
Пример #11
0
	def parse_data(self):
		try:
			for i in range(len(self.zone_provice_code)):
				print("provice code: %s" % self.zone_provice_code[i])
				for k , v in self.zone_data[i][0].items():
					city_code = hashlib.md5(os.urandom(16)).hexdigest()
					city = City(self.zone_provice_code[i], city_code, v)
					self.db.add(city)
					print("add city: %s" % v)
					city_zones = self.zone_data[i][1].get(k)
					if city_zones:
						for zk, zv in city_zones.items():
							if zv:
								zone = Zone(city_code, zk, zv)
								self.db.add(zone)
								print("city: %s - zone: %s" % (v, zv))
				self.db.commit()
		except Exception as e:
			self.db.rollback()
		finally:
			self.db.close()
Пример #12
0
    def __init__(self, parent, ctx, args, guild, user, channel):
        """
        Command handler for EngagementCommand

        Parameters
        ----------
        parent : DreamcraftHandler
            The handler for Dreamcraft Bot commands and subcommands
        ctx : object(Context)
            The Discord.Context object used to retrieve and send information to Discord users
        args : array(str)
            The arguments sent to the bot to parse and evaluate
        guild : Guild
            The guild object containing information about the server issuing commands
        user : User
            The user database object containing information about the user's current setttings, and dialogs
        channel : Channel
            The channel from which commands were issued

        Returns
        -------
        EngagementCommand - object for processing engagement commands and subcommands
        """

        self.parent = parent
        self.new = parent.new
        self.delete = parent.delete
        self.ctx = ctx
        self.args = args[1:]
        self.guild = guild
        self.user = user
        self.command = self.args[0].lower() if len(self.args) > 0 else 'n'
        channel = 'private' if ctx.channel.type.name == 'private' else ctx.channel.name
        self.channel = Channel().get_or_create(channel, self.guild.name, self.user)
        self.scenario = Scenario().get_by_id(self.channel.active_scenario) if self.channel and self.channel.active_scenario else None
        self.sc = Scene().get_by_id(self.channel.active_scene) if self.channel and self.channel.active_scene else None
        self.zone = Zone().get_by_id(self.channel.active_zone) if self.channel and self.channel.active_zone else None
        self.engagement = Engagement().get_by_id(self.channel.active_engagement) if self.channel and self.channel.active_engagement else None
        self.can_edit = self.user.role == 'Game Master' if self.user and self.engagement else True
        self.char = Character().get_by_id(self.user.active_character) if self.user and self.user.active_character else None
Пример #13
0
    def zone_list(self, args):
        """Display a dialog for viewing and selecting Zones
        
        Parameters
        ----------
        args : list(str)
            List of strings with subcommands

        Returns
        -------
        list(str) - the response messages string array
        """

        messages = []
        if not self.sc:
            raise Exception('No active scene. Try this:```css\n.d scene "SCENE NAME"```')
        def canceler(cancel_args):
            if cancel_args[0].lower() in ['zone']:
                return ZoneCommand(parent=self.parent, ctx=self.ctx, args=cancel_args, guild=self.guild, user=self.user, channel=self.channel).run()
            else:
                self.parent.args = cancel_args
                self.parent.command = self.parent.args[0]
                return self.parent.get_messages()

        messages.extend(Dialog({
            'svc': zone_svc,
            'user': self.user,
            'title': 'Zone List',
            'command': 'zone ' + (' '.join(args)),
            'type': 'view',
            'type_name': 'ZONE',
            'getter': {
                'method': Zone().get_by_scene,
                'params': {'scene': self.sc, 'archived': False}
            },
            'formatter': lambda item, item_num, page_num, page_size: f'{item.get_short_string(self.channel)}',
            'cancel': canceler
        }).open())
        return messages
Пример #14
0
 def delete_zone(self, args, guild, channel, scene, zone, user):
     messages = []
     search = ''
     if len(args) == 1:
         if not zone:
             raise Exception('No zone provided for deletion')
     else:
         search = ' '.join(args[1:])
         zone = Zone().find(guild.name, str(channel.id), str(scene.id), search)
     if not zone:
         return [f'{search} was not found. No changes made.']
     else:
         search = str(zone.name)
         channel_id = str(zone.channel_id) if zone.channel_id else ''
         zone.character.archive(user)
         zone.archived = True
         self.save(zone, user)
         messages.append(f'***{search}*** removed')
         if channel_id:
             channel = Channel().get_by_id(channel_id)
             messages.append(channel.get_string())
         return messages
Пример #15
0
def SaveZone(lst):
    try:
        logok = ''
        logero = ''
        first_sheet = lst.sheet_by_index(0)
        for r in range(1, first_sheet.nrows):
            m = first_sheet.cell(r, 0).value
            m2 = first_sheet.cell(r, 2).value
            chk = Zone.objects.filter(ZoneName=m, Network=m2).exists()
            if chk == False:
                sv = Zone(
                    ZoneName=m,
                    Description=first_sheet.cell(r, 1).value,
                    Network=m2,
                )
                sv.save()
                logok += m.encode("utf-8") + '/'
            elif chk == True:
                logero += m.encode("utf-8") + '/'

        return {'y0': logok, 'y1': logero}
    except:
        return False
Пример #16
0
    def _do_create_domain(self):
        tenant = self.select_random_tenant()
        if not tenant:
            return
        client = self.designate_client.as_user(tenant)
        zone_name, email = random_zone_email()
        payload = {"name": zone_name, "email": email, "ttl": 7200}

        # the with block lets us specify when the request has succeeded.
        # this lets us time how long until an active or error status.
        start_time = time.time()
        post_resp = client.post_zone(data=json.dumps(payload),
                                     name='/v2/zones')
        if not post_resp.ok:
            return
        if CONFIG.use_digaas:
            self.digaas_behaviors.observe_zone_create(post_resp, start_time)

        api_call = lambda: client.get_zone(zone_id=post_resp.json()['id'],
                                           name='/v2/zones/ID - status check')

        self._poll_until_active_or_error(
            api_call=api_call,
            status_function=lambda r: r.json()['status'],
            success_function=lambda: self.async_success(
                post_resp, start_time, '/v2/zones - async'),
            failure_function=lambda msg: self.async_failure(
                post_resp, start_time, '/v2/zones - async', msg),
        )

        # if we successfully created the zone, add it to our list
        # todo: add some domains to the delete list
        resp = api_call()
        if resp.ok and resp.json()['status'] == 'ACTIVE':
            zone = Zone(resp.json()['id'], resp.json()['name'])
            # LOG.info("%s -- Added zone %s", tenant, zone)
            tenant.data.zones_for_delete.append(zone)
Пример #17
0
 def adjoin(self, args, guild, channel, sc, user):
     messages = []
     incorrect_sytax = f'Incorrect syntax:```css\n.d scene {args[0]} "ZONE NAME 1" to "Zone Name 2"```'
     if len(args) < 4 or ' to ' not in ' '.join(args):
         raise Exception('\n'.join(['No zones adjoined', incorrect_sytax]))
     if not sc:
         raise Exception(
             'You don\'t have an active scene. Try this:```css\n.d new scene SCENE_NAME```'
         )
     zones = ' '.join(args).replace(f'{args[0]} ', '').split(' to ')
     zone_list = []
     for z in zones:
         zone = Zone().find(name=z,
                            guild=guild,
                            channel_id=str(channel.id),
                            scene_id=str(sc.id))
         if zone:
             zone_list.append(zone)
     if len(zone_list) < 2:
         raise Exception(f'***{zones[0]}*** or ***{zones[1]}*** not found')
     adjoined = []
     if sc.adjoined_zones:
         adjoined = copy.deepcopy(sc.adjoined_zones)
     for adjoin in adjoined:
         if str(zone_list[0].id) in adjoin and str(
                 zone_list[1].id) in adjoin:
             raise Exception(
                 f'***{zone_list[0].name}*** and ***{zone_list[1].name}*** are already adjoined in ***{sc.name}***'
             )
     adjoined.append([str(z.id) for z in zone_list])
     sc.adjoined_zones = adjoined
     self.save(sc, user)
     messages.append(
         f'***{zone_list[0].name}*** and ***{zone_list[1].name}*** are now adjoined in ***{sc.name}***'
     )
     return messages
Пример #18
0
#!/usr/bin/env python3

import sys
from pathlib import Path

# add parent folder
sys.path.append(str(Path(__file__).parent.parent.absolute()))

from app import db, app  # noqa: E402
from models import Zone  # noqa: E402

zone = Zone(zone=input("Enter zone name: "))

with app.app_context():
    db.session.add(zone)
    db.session.commit()
Пример #19
0
    def new_zone(self, args):
        """Create a new Zone by name
        
        Parameters
        ----------
        args : list(str)
            List of strings with subcommands

        Returns
        -------
        list(str) - the response messages string array
        """

        if not self.sc:
            raise Exception('No active scene or name provided. Try this:```css\n.d scene "SCENE NAME"```')
        messages = []
        if len(args) == 0:
            if not self.zone:
                return [
                    'No active zone or name provided\n\n',
                    self.dialog('all')
                ]
            messages.append(self.zone.get_string(self.channel))
        else:
            if len(args) == 1 and args[0].lower() == 'short':
                return [self.dialog('active_zone_short')]
            zone_name = ' '.join(args)
            if len(args) > 1 and args[1] == 'rename':
                zone_name = ' '.join(args[2:])
                if not self.zone:
                    return [
                        'No active zone or name provided\n\n',
                        self.dialog('all')
                    ]
                else:
                    zone = Zone().find(self.guild.name, str(self.channel.id), str(self.sc.id), zone_name)
                    if zone:
                        return [f'Cannot rename to _{zone_name}_. Zone already exists']
                    else:
                        self.zone.name = zone_name
                        zone_svc.save(self.zone, self.user)
                        messages.append(self.dialog(''))
            else:
                def canceler(cancel_args):
                    if cancel_args[0].lower() in ['zone','z']:
                        return ZoneCommand(parent=self.parent, ctx=self.ctx, args=cancel_args, guild=self.guild, user=self.user, channel=self.channel).run()
                    else:
                        self.parent.args = cancel_args
                        self.parent.command = self.parent.args[0]
                        return self.parent.get_messages()

                def selector(selection):
                    self.zone = selection
                    self.channel.set_active_zone(self.zone, self.user)
                    self.user.set_active_character(self.zone.character)
                    zone_svc.save_user(self.user)
                    return [self.dialog('')]

                messages.extend(Dialog({
                    'svc': zone_svc,
                    'user': self.user,
                    'title': 'Zone List',
                    'command': 'new zone ' + ' '.join(args),
                    'type': 'select',
                    'type_name': 'ZONE',
                    'getter': {
                        'method': Zone.get_by_page,
                        'params': {'params': {'name__icontains': zone_name, 'channel_id': str(self.channel.id), 'guild': self.guild.name, 'archived': False}}
                    },
                    'formatter': lambda item, item_num, page_num, page_size: f'_ZONE #{item_num+1}_\n{item.get_short_string()}',
                    'cancel': canceler,
                    'select': selector,
                    'confirm': {
                        'method': Zone().get_or_create,
                        'params': {'user': self.user, 'name': zone_name, 'scene': self.sc, 'channel': self.channel, 'guild': self.guild.name}
                    }
                }).open())
        return messages
Пример #20
0
def env_live_01():
    session.add_all([
        User(name="Administrator", role=ROLE_ADMIN, access_code="1234"),
        User(name="Chuck.Norris", role=ROLE_USER, access_code="1111"),
    ])
    print(" - Created users")

    z1 = Zone(name="No delay", description="Alert with no delay")
    z2 = Zone(name="Away delayed",
              away_alert_delay=20,
              description="Alert delayed when armed AWAY")
    z3 = Zone(name="Stay delayed",
              stay_alert_delay=20,
              description="Alert delayed when armed STAY")
    z4 = Zone(name="Stay",
              stay_alert_delay=None,
              description="No alert when armed STAY")
    z5 = Zone(name="Away/Stay delayed",
              away_alert_delay=40,
              stay_alert_delay=20,
              description="Alert delayed when armed AWAY/STAY")
    z6 = Zone(name="Tamper",
              disarmed_delay=0,
              away_alert_delay=None,
              stay_alert_delay=None,
              description="Sabotage alert")
    session.add_all([z1, z2, z3, z4, z5, z6])
    print(" - Created zones")

    session.add_all(SENSOR_TYPES)
    print(" - Created sensor types")

    s1 = Sensor(channel=0,
                sensor_type=SENSOR_TYPES[0],
                zone=z5,
                description="Garage")
    s2 = Sensor(channel=1,
                sensor_type=SENSOR_TYPES[0],
                zone=z5,
                description="Hall")
    s3 = Sensor(channel=2,
                sensor_type=SENSOR_TYPES[2],
                zone=z5,
                description="Front door")
    s4 = Sensor(channel=3,
                sensor_type=SENSOR_TYPES[0],
                zone=z3,
                description="Kitchen")
    s5 = Sensor(channel=4,
                sensor_type=SENSOR_TYPES[0],
                zone=z1,
                description="Living room")
    s6 = Sensor(channel=5,
                sensor_type=SENSOR_TYPES[0],
                zone=z4,
                description="Children's room")
    s7 = Sensor(channel=6,
                sensor_type=SENSOR_TYPES[0],
                zone=z4,
                description="Bedroom")
    s8 = Sensor(channel=7,
                sensor_type=SENSOR_TYPES[1],
                zone=z6,
                description="Tamper")
    session.add_all([s1, s2, s3, s4, s5, s6, s7, s8])
    print(" - Created sensors")

    kt1 = KeypadType(1, "DSC", "DSC keybus (DSC PC-1555RKZ)")
    session.add_all([kt1])
    print(" - Created keypad types")

    k1 = Keypad(keypad_type=kt1)
    session.add_all([k1])
    print(" - Created keypads")

    session.commit()