Beispiel #1
0
 def creator(**params):
     item = Scene().get_or_create(**params)
     scenes = scenario_svc.get_scenes(self.scenario)
     characters = scenario_svc.get_characters(scenes)
     item.characters = [str(c.id) for c in characters]
     scene_svc.save(item, self.user)
     return item
 def delete_scene(self, args, guild, channel, scenario, sc, user):
     messages = []
     search = ''
     if len(args) == 1:
         if not sc:
             raise Exception('No scene provided for deletion')
     else:
         search = ' '.join(args[1:])
         sc = Scene().find(guild.name, str(channel.id), str(scenario.id),
                           search)
     if not sc:
         return [f'{search} was not found. No changes made.']
     else:
         search = str(sc.name)
         scenario_id = str(sc.scenario_id) if sc.scenario_id else ''
         channel_id = str(sc.channel_id) if sc.channel_id else ''
         sc.character.archive(user)
         sc.archived = True
         sc.updated_by = str(user.id)
         sc.updated = T.now()
         sc.save()
         messages.append(f'***{search}*** removed')
         if scenario_id:
             secenario = Scenario().get_by_id(scenario_id)
             messages.append(secenario.get_string(channel))
         elif channel_id:
             channel = Channel().get_by_id(channel_id)
             messages.append(channel.get_string())
         return messages
Beispiel #3
0
 def __init__(self, mongo_name=None):
     self.mongo_wrapper = MongoWrapper(mongo_name)
     self.mono_db_names = self.mongo_wrapper.get_db_names()
     self.scenes_handler = Scene(self.mongo_wrapper)
     self.hypothesis_handler = Hypothesis(self.mongo_wrapper)
     self.objects_handler = Object(self.mongo_wrapper)
     self.active_data_type = self.scenes_handler
    def __init__(self, parent, ctx, args, guild, user, channel):
        """
        Command handler for SessionCommand

        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
        -------
        SessionCommand - object for processing session 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.session = Session().get_by_id(
            self.channel.active_session
        ) if self.channel and self.channel.active_session else None
        self.can_edit = self.user.role == 'Game Master' if self.user and self.session else True
        self.char = Character().get_by_id(
            self.user.active_character
        ) if self.user and self.user.active_character else None
Beispiel #5
0
    def delete_scene(self, args):
        """Delete (archive) the current active Scene
        
        Parameters
        ----------
        args : list(str)
            List of strings with subcommands

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

        if not self.scenario:
            raise Exception('No active scenario. Try this:```css\n.d scenario "SCENARIO NAME"```')

        return scene_svc.delete_item(args, self.user, self.sc, Scene().find, {'guild': self.guild.name, 'channel_id': str(self.channel.id), 'scenario_id': str(self.scenario.id)})
    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
Beispiel #7
0
def enter_new_order(email, order_source, scene_list, option_string, note=''):
    '''Places a new espa order in the database'''
    order = Order()
    order.orderid = generate_order_id(email)
    order.email = email
    order.note = note
    order.status = 'ordered'
    order.order_date = datetime.datetime.now()
    order.product_options = option_string
    order.order_source = order_source
    order.save()

    for s in set(scene_list):
        scene = Scene()
        scene.name = s
        scene.order = order
        scene.order_date = datetime.datetime.now()
        scene.status = 'submitted'
        scene.save()

    return order
Beispiel #8
0
    def scene_list(self, args):
        """Display a dialog for viewing and selecting Scenes
        
        Parameters
        ----------
        args : list(str)
            List of strings with subcommands

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

        messages = []
        if not self.scenario:
            raise Exception('No active scenario. Try this:```css\n.d scenario "SCENARIO NAME"```')
        def canceler(cancel_args):
            if cancel_args[0].lower() in ['scene']:
                return SceneCommand(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': scene_svc,
            'user': self.user,
            'title': 'Scene List',
            'command': 'scene ' + (' '.join(args)),
            'type': 'view',
            'getter': {
                'method': Scene().get_by_scenario,
                'params': {'scenario': self.scenario, 'archived': False}
            },
            'formatter': lambda item, item_num, page_num, page_size: f'{item.get_short_string(self.channel)}',
            'cancel': canceler
        }).open())
        return messages
Beispiel #9
0
 def add_music_scene_tag(self, name):
     scene = Scene(name=name)
     database.session.add(scene)
     database.session.commit()
Beispiel #10
0
def load_ee_orders():
    ''' Loads all the available orders from lta into our database and updates their status '''
    lta_service = lta.LtaServices()

    #This returns a dict that contains a list of dicts{}
    #key:(order_num,email) = list({sceneid:, unit_num:})
    orders = lta_service.get_available_orders()

    #This sets (hard codes) the product options that comes in from EE when someone
    #is requesting processing via their interface
    ee_options = {
        'include_sourcefile': False,
        'include_source_metadata': False,
        'include_sr_toa': False,
        'include_sr_thermal': False,
        'include_sr': True,
        'include_sr_browse': False,
        'include_sr_ndvi': False,
        'include_sr_ndmi': False,
        'include_sr_nbr': False,
        'include_sr_nbr2': False,
        'include_sr_savi': False,
        'include_sr_evi': False,
        'include_solr_index': False,
        'include_cfmask': False,
        'reproject': False,
        'resize': False,
        'image_extents': False
    }

    #Capture in our db
    for eeorder, email in orders:

        #create the orderid based on the info from the eeorder
        order_id = generate_ee_order_id(email, eeorder)
        order = None

        #go look to see if it already exists in the db
        try:
            order = Order.objects.get(orderid=order_id)
        except:
            #Didn't find it in the db... make the order now
            order = Order()
            order.orderid = generate_ee_order_id(email, eeorder)
            order.email = email
            order.chain = 'sr_ondemand'
            order.status = 'ordered'
            order.note = 'EarthExplorer order id: %s' % eeorder
            order.product_options = json.dumps(ee_options)
            order.ee_order_id = eeorder
            order.order_source = 'ee'
            order.order_date = datetime.datetime.now()
            order.save()

        for s in orders[eeorder, email]:
            #go look for the scene by ee_unit_id.  This will stop
            #duplicate key update collisions

            scene = None
            try:
                scene = Scene.objects.get(order=order,
                                          ee_unit_id=s['unit_num'])
                if scene.status == 'complete':
                    success, msg, status = lta_service.update_order(
                        eeorder, s['unit_num'], "C")
                    if not success:
                        log_msg = "Error updating lta for [eeorder:%s ee_unit_num:%s scene name:%s order:%s" % (
                            eeorder, s['unit_num'], scene.name, order.orderid)
                        helperlogger(log_msg)
                        log_msg = "Error detail: lta return message:%s  lta return status code:%s" % (
                            msg, status)
                        helperlogger(log_msg)
                elif scene.status == 'unavailable':
                    success, msg, status = lta_service.update_order(
                        eeorder, s['unit_num'], "R")
                    if not success:
                        log_msg = "Error updating lta for [eeorder:%s ee_unit_num:%s scene name:%s order:%s" % (
                            eeorder, s['unit_num'], scene.name, order.orderid)
                        helperlogger(log_msg)
                        log_msg = "Error detail: lta return message:%s  lta return status code:%s" % (
                            msg, status)
                        helperlogger(log_msg)
            except:
                scene = Scene()
                scene.name = s['sceneid']
                scene.ee_unit_id = s['unit_num']
                scene.order = order
                scene.order_date = datetime.datetime.now()
                scene.status = 'submitted'
                scene.save()

            #Update LTA
            success, msg, status = lta_service.update_order(
                eeorder, s['unit_num'], "I")
            if not success:
                log_msg = "Error updating lta for [eeorder:%s ee_unit_num:%s scene name:%s order:%s" % (
                    eeorder, s['unit_num'], scene.name, order.orderid)
                helperlogger(log_msg)
                log_msg = "Error detail: lta return message:%s  lta return status code:%s" % (
                    msg, status)
                helperlogger(log_msg)
Beispiel #11
0
    def new_scene(self, args):
        """Create a new Scene by name
        
        Parameters
        ----------
        args : list(str)
            List of strings with subcommands

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

        messages = []
        if not self.scenario:
            raise Exception('No active scenario. Try this:```css\n.d new scenario "SCENARIO NAME"```')
        if len(args) == 0:
            if not self.sc:
                return [
                    'No active scene or name provided\n\n',
                    self.dialog('all')
                ]
            messages.append(self.sc.get_string(self.channel, self.user))
        else:
            if len(args) == 1 and args[0].lower() == 'short':
                return [self.dialog('active_scene_short')]
            scene_name = ' '.join(args)
            if len(args) > 1 and args[1] == 'rename':
                scene_name = ' '.join(args[2:])
                if not self.sc:
                    return [
                        'No active scene or name provided\n\n',
                        self.dialog('all')
                    ]
                else:
                    scene = Scene().find(self.guild.name, str(self.channel.id), str(self.scenario.id), scene_name)
                    if scene:
                        return [f'Cannot rename to _{scene_name}_. Scene already exists']
                    else:
                        self.sc.name = scene_name
                        scene_svc.save(self.sc, self.user)
                        messages.append(self.dialog(''))
            else:
                def canceler(cancel_args):
                    if cancel_args[0].lower() in ['scene','s']:
                        return SceneCommand(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.sc = selection
                    self.channel.set_active_scene(self.sc, self.user)
                    return [self.dialog('')]

                def creator(**params):
                    item = Scene().get_or_create(**params)
                    scenes = scenario_svc.get_scenes(self.scenario)
                    characters = scenario_svc.get_characters(scenes)
                    item.characters = [str(c.id) for c in characters]
                    scene_svc.save(item, self.user)
                    return item

                messages.extend(Dialog({
                    'svc': scene_svc,
                    'user': self.user,
                    'title': 'Scene List',
                    'command': 'new scene ' + ' '.join(args),
                    'type': 'select',
                    'type_name': 'SCENE',
                    'getter': {
                        'method': Scene.get_by_page,
                        'params': {'params': {'name__icontains': scene_name, 'scenario_id': str(self.scenario.id), 'guild': self.guild.name, 'archived': False}}
                    },
                    'formatter': lambda item, item_num, page_num, page_size: f'_SCENE #{item_num+1}_\n{item.get_short_string()}',
                    'cancel': canceler,
                    'select': selector,
                    'confirm': {
                        'method': creator,
                        'params': {'user': self.user, 'name': scene_name, 'scenario': self.scenario, 'channel': self.channel, 'guild': self.guild.name}
                    }
                }).open())
        return messages
Beispiel #12
0
from models import Scene
import sys


size = 550

if __name__ == "__main__":
    angle = None
    try:
        angle = int(sys.argv[1])
    except IndexError as e:
        print(f"IndexError: {e.args} - No argument passed in command line")
    finally:
        if angle is None:
            angle = 1
    scene = Scene(size, angle)
    scene.draw()
Beispiel #13
0
 def get_scene_by_id(self, scene_id):
     response = requests.get(self._base_url + 'do=/scenes/' + str(scene_id), timeout=TIMEOUT)
     data = json.loads(response.content)
     scene = data['scene']
     return Scene(scene)
Beispiel #14
0
 def __map_response_to_scenes(self, scene_list):
     scene_objects = map(lambda x: Scene(x), scene_list)
     return scene_objects