def create_output(self):
     _id = get_uuid()[:6]
     self.output('upload', '', {'output':'<div id="upload_%s"><input type="file" name="file" data-url="/upload?path=%s"></input></div>' % (_id, self.command['cwd'].rstrip('>')), 
                             'raw':True,
                             'eid':_id,
                             'id':self.command['id']})
     self.status = 1
示例#2
0
        def p():
            if len(self._cmd_args) > 1:
                filename = os.path.join(self.command['cwd'].rstrip('>'),
                                        self._cmd_args[1])
                if not os.path.exists(filename):
                    self.output('err',
                                'filename %s is not existed!' % filename)
                    return
                try:
                    flag = can_download(filename)
                    if not flag:
                        self.output(
                            'err',
                            "You have no rights to download %s." % filename)
                        return
                except Exception as e:
                    self.output('err', str(e))
                    return

                token = get_uuid()
                #todo check the right of the file
                url = '/download?token=' + token
                download_tokens[token] = filename
                self.output('download', url)
            else:
                self.output('err',
                            'You should provide filename paramter first.')
示例#3
0
def set_lock(key, value=None, expiry_time=60):
    """Force to set a distribute lock"""
    from uliweb.utils.common import get_uuid

    redis = get_redis()
    value = value or get_uuid()
    return redis.set(key, value, ex=expiry_time, xx=True)
示例#4
0
文件: __init__.py 项目: 28sui/uliweb
def set_lock(key, value=None, expiry_time=60):
    """Force to set a distribute lock"""
    from uliweb.utils.common import get_uuid

    redis = get_redis()
    value = value or get_uuid()
    return redis.set(key, value, ex=expiry_time, xx=True)
 def p():
     cur_path = self.command['cwd'].rstrip('>')
     def iter_file():
         if len(self._cmd_args) > 1:
             for p in self._cmd_args:
                 for x in iglob(os.path.join(cur_path, p)):
                     yield x
         else:
             for x in iglob(os.path.join(cur_path, '*.*')):
                 yield x
         
     for f in iter_file():
         if not os.path.exists(f):
             continue
         #test is the file is an image
         if not test_image(f, strong=True):
             continue
         try:
             flag = can_download(f)
             if not flag:
                 self.output('err', 'You have no rights to view the image file %s.' % f)
                 continue
         except Exception as e:
             self.output('err', str(e))
             continue
         
         token = get_uuid()
         #todo check the right of the file
         url = '/images?token=' + token
         images_tokens[token] = f
         self.output('data', '', {'output':'<img src="/image?token=%s" title="%s"/>'%(token, f), 
                             'raw':True,
                             'id':self.command['id']}
         )
示例#6
0
文件: views.py 项目: hihihippp/wshell
 def on_login(self, data):
     from uliweb.utils.common import get_uuid
     from uliweb import settings
     
     if data['user'] == settings.WSHELL.user and data['password'] == settings.WSHELL.password:
         token = get_uuid()
     else:
         token = False
     
     self.emit('logined', {'output':os.getcwd(), 'token':token, 'id':data['id']})
示例#7
0
    def save(self, model_name):
        import json as JSON
        from uliweb.utils.common import get_uuid

        column_name = request.GET.get('column_name')
        column = JSON.loads(request.POST[column_name])
        uuid = request.GET.get('uuid')
        action = request.GET.get('action')

        obj = self._get_model(model_name, uuid)
        old_column = getattr(obj, column_name)

        list_columns = column_name in ('fields', 'indexes', 'extension_fields',
                                       'extension_indexes')
        if list_columns:
            old_column = eval(old_column or '[]')

        index = -1
        if action in ('edit', 'delete'):
            for x in range(len(old_column)):
                if old_column[x]['name'] == column['name']:
                    index = x
                    break

        if index >= 0:
            reserved = old_column[index].pop('_reserved', False)
        else:
            reserved = None

        if action in ('add', 'delete') or (index>=0 and old_column[index] != column):
            #if not published, then directly use current record
            if obj.status == '1':
                data = obj.to_dict()
                data.pop('id')
                data.pop('create_time')
                data['status'] = '0'
                obj = self.model_his(**data)
                obj.uuid = get_uuid()[:6]

            if list_columns:
                if action == 'add':
                    old_column.append(column)
                elif action == 'edit':
                    column['_reserved'] = reserved
                    old_column[index] = column
                else:
                    del old_column[index]
            else:
                old_column = column

            setattr(obj, column_name, old_column)
            obj.save(version=True)
            uuid = obj.uuid
        return json({'success':True, 'message':'Success!', 'data':{'uuid':uuid}})
 def on_login(self, data):
     from uliweb.utils.common import get_uuid
     from uliweb import settings
     
     if data['user'] == settings.WSHELL.user and data['password'] == settings.WSHELL.password:
         token = get_uuid()
     else:
         token = False
     
     path = self._get_login_path()
     authenticated[data['id']] = token
     self.emit('logined', {'output':path+'>', 'token':token, 'id':data['id']})
示例#9
0
文件: views.py 项目: itnihao/wshell
 def on_login(self, data):
     from uliweb.utils.common import get_uuid
     from uliweb import settings, application
     
     if data['user'] == settings.WSHELL.user and data['password'] == settings.WSHELL.password:
         token = get_uuid()
     else:
         token = False
     
     os.environ['PROJECT'] = application.project_dir
     path = os.path.expandvars(settings.WSHELL.login_path)
     self.emit('logined', {'output':path, 'token':token, 'id':data['id']})
示例#10
0
 def create_output(self):
     _id = get_uuid()[:6]
     self.output(
         'upload', '', {
             'output':
             '<div id="upload_%s"><input type="file" name="file" data-url="/upload?path=%s"></input></div>'
             % (_id, self.command['cwd'].rstrip('>')),
             'raw':
             True,
             'eid':
             _id,
             'id':
             self.command['id']
         })
     self.status = 1
示例#11
0
    def on_login(self, data):
        from uliweb.utils.common import get_uuid
        from uliweb import settings

        if data['user'] == settings.WSHELL.user and data[
                'password'] == settings.WSHELL.password:
            token = get_uuid()
        else:
            token = False

        path = self._get_login_path()
        authenticated[data['id']] = token
        self.emit('logined', {
            'output': path + '>',
            'token': token,
            'id': data['id']
        })
示例#12
0
        def p():
            cur_path = self.command['cwd'].rstrip('>')

            def iter_file():
                if len(self._cmd_args) > 1:
                    for p in self._cmd_args:
                        for x in iglob(os.path.join(cur_path, p)):
                            yield x
                else:
                    for x in iglob(os.path.join(cur_path, '*.*')):
                        yield x

            for f in iter_file():
                if not os.path.exists(f):
                    continue
                #test is the file is an image
                if not test_image(f, strong=True):
                    continue
                try:
                    flag = can_download(f)
                    if not flag:
                        self.output(
                            'err',
                            'You have no rights to view the image file %s.' %
                            f)
                        continue
                except Exception as e:
                    self.output('err', str(e))
                    continue

                token = get_uuid()
                #todo check the right of the file
                url = '/images?token=' + token
                images_tokens[token] = f
                self.output(
                    'data', '', {
                        'output':
                        '<img src="/image?token=%s" title="%s"/>' % (token, f),
                        'raw':
                        True,
                        'id':
                        self.command['id']
                    })
示例#13
0
        def pre_save(data):
            from uliweb.utils.common import get_uuid, import_attr
            from uliweb.contrib.model_config import get_model_fields, get_model_indexes

            data['uuid'] = get_uuid()[:6]
            if not data['table_name']:
                data['table_name'] = data['model_name'].lower()

            if not data['display_name']:
                data['display_name'] = data['model_name']

            #add import basemodel support
            if data['basemodel']:
                BM = import_attr(data['basemodel'])
                data['fields'] = get_model_fields(BM)
                data['indexes'] = get_model_indexes(BM)

            if data['extension_model']:
                EM = import_attr(data['extension_model'])
                data['extension_fields'] = get_model_fields(EM)
                data['extension_indexes'] = get_model_indexes(EM)
示例#14
0
文件: views.py 项目: itnihao/wshell
 def p():
     if len(self._cmd_args) > 1:
         filename = os.path.join(self.command['cwd'], self._cmd_args[1])
         if not os.path.exists(filename):
             self.output('err', 'filename %s is not existed!' % filename)
             return
         try:
             flag = can_download(filename)
             if not flag:
                 self.output('err', 'filename %s is not existed!' % filename)
                 return
         except Exception as e:
             self.output('err', str(e))
             return
         
         token = get_uuid()
         #todo check the right of the file
         url = '/download?token=' + token
         download_tokens[token] = filename
         self.output('download', url)
     else:
         self.output('err', 'You should give filename paramter')
示例#15
0
        def pre_save(data):
            from uliweb.utils.common import get_uuid, import_attr
            data['uuid'] = get_uuid()

            if not data['display_name']:
                data['display_name'] = data['sheet_name']
示例#16
0
    def __init__(self, command, parameters=None, title=None, timeout=None, max_retry_times=None,
                 retry_time_interval=None, startup_time=None, base=None, task_id=None,
                 user_id=None, src_ip=None, version='1.0', correlation=None,
                 correlation_link=None, parent_task=None,
                 sync=False, queue=None, **kwargs):
        """
        depend is relative task, only when depend task run successfully this task will
        be started
        sync 表示是否同步执行还是异步, 当True时,执行call_sync时会直接处理
        queue使用配置中ASYNC_TASKS_QUEUES的值
        """
        from uliweb import settings, request
        from uliweb.utils.common import get_uuid

        self.name = ''
        self.function = ''
        self.title = title or command
        self.task_id = task_id or get_uuid()
        self.parent_task = parent_task
        self.timeout = timeout or parse_time(settings.get_var('ASYNC_TASKS/timeout')) #ms
        self.max_retry_times = max_retry_times or \
                               settings.get_var('ASYNC_TASKS/max_retry_times')
        self.retry_time_interval = retry_time_interval or parse_time(settings.get_var(
                                                'ASYNC_TASKS/retry_time_interval')) #1m
        #add direct queue name, it maybe a list
        if isinstance(queue, (tuple, list)):
            self.queue = queue
        else:
            self.queue = settings.ASYNC_TASKS_QUEUES.get(queue or 'default')
        self.parameters = parameters or settings.get_var('ASYNC_TASKS/parameters')
        self.startup_time = startup_time
        self.depend_tasks = []
        self.children_count = 0
        self.sync = sync
        self.task = None
        self.tasks = {}
        self.version = version
        self.base = base or settings.get_var('ASYNC_TASKS/base')
        if user_id:
            self.user_id = user_id
        else:
            if request and request.user:
                self.user_id = request.user.id
            else:
                self.user_id = 'SYS'
        self.src_ip = src_ip or settings.get_var('PARA/HOST')
        self.correlation = correlation
        self.correlation_link = correlation_link
        self.kwargs = kwargs or {} #external parameters

        #process function object
        if callable(command):
            command = command.__module__ + '.' + command.__name__
            self.name = command
        if not command:
            self.name = ''
            self.function = ''
        elif isinstance(command, dict):
            self.name = command.get('cmd_name', self.name)

            if self.name:
                s = settings.get_var('ASYNC_TASKS_COMMANDS/%s' % self.name)
                if s:
                    self._set_command(s)
                self._set_command(command)
        elif isinstance(command, (str, unicode)):
            if '.' not in command: #guess it as command name
                self.name = command
                s = settings.get_var('ASYNC_TASKS_COMMANDS/%s' % self.name)
                if s:
                    self._set_command(s)
                else:
                    raise ErrorWrongSettingEntry(self.name)
            else:
                self.function = command
                self.name = command
        else:
            raise ErrorWrongCommand(command)
示例#17
0
文件: uliform.py 项目: uxiexs/uliweb
class Form(object):

    __metaclass__ = FormMetaclass

    layout_class = BootstrapLayout
    layout = None
    layout_class_args = {}
    fieldset = False
    form_action = ''
    form_method = 'POST'
    form_buttons = None
    form_title = None
    form_class = None
    form_id = 'form_' + get_uuid()[:5]
    rules = {}
    front_rules = {'rules': {}, 'messages': {}}

    def __init__(self,
                 action=None,
                 method=None,
                 buttons=None,
                 validators=None,
                 html_attrs=None,
                 data=None,
                 errors=None,
                 idtype='name',
                 title='',
                 vars=None,
                 layout=None,
                 id=None,
                 _class='',
                 **kwargs):
        self.form_action = action or self.form_action or request_url()
        self.form_method = method or self.form_method
        self.form_title = title or self.form_title
        self.form_class = _class or self.form_class
        self.kwargs = kwargs
        buttons = buttons or self.form_buttons or [
            str(
                Button(value=_('Submit'),
                       _class="btn btn-primary",
                       name="submit",
                       type="submit"))
        ]
        if buttons:
            if isinstance(buttons, (tuple, list)):
                self._buttons = list(buttons)
            else:
                self._buttons = [buttons]
        self.validators = validators or []
        self.html_attrs = html_attrs or {}
        if '_class' in self.html_attrs:
            self.html_attrs['class'] = self.html_attrs.pop('_class')

        self.idtype = idtype
        self.layout = layout or self.layout
        self.vars = vars
        for name, obj in self.fields_list:
            obj.idtype = self.idtype

        if self.form_class:
            self.html_attrs[
                'class'] = self.form_class  # + ' ' + DEFAULT_FORM_CLASS

        if 'class' not in self.html_attrs:
            self.html_attrs['class'] = ''

        self.form_class = self.html_attrs.get('class')
        self.form_id = id or self.html_attrs.get('id') or self.form_id

        self.bind(data or {}, errors or {})
        self.__init_validators()
        self.ok = True

    @classmethod
    def add_field(cls, field_name, field, attribute=False):
        if isinstance(field, BaseField):
            check_reserved_word(field_name)
            cls.fields[field_name] = field
            rules = cls.rules.get(field_name)
            if rules:
                field.rules.update(rules)
            field.__property_config__(cls, field_name)
            if attribute:
                setattr(cls, field_name, field)
            cls.fields_list.append((field_name, field))

    def __init_validators(self):
        for k, obj in self.fields.items():
            func = getattr(self, 'validate_%s' % obj.field_name, None)
            if func and callable(func):
                obj.validators.insert(0, func)

        func = getattr(self, 'form_validate', None)
        if func and callable(func):
            self.validators.append(func)

    def validate(self, *data):
        old_data = self.data.copy()
        all_data = {}
        for k, v in self.fields.items():
            #skip static field
            if not v.static:
                v.parse_data(data, all_data)

        errors = D({})
        new_data = {}

        #gather all fields
        for field_name, field in self.fields.items():
            new_data[field_name] = field.get_data(all_data)

        #validate and gather the result
        # result = D({})
        result = D(new_data.copy())
        for field_name, field in self.fields.items():
            flag, value = field.validate(new_data[field_name], result)
            if not flag:
                if isinstance(value, dict):
                    errors.update(value)
                else:
                    errors[field_name] = value
            else:
                result[field_name] = value

        if not errors and self.validators:
            #validate global
            for v in self.validators:
                r = v(result)
                if r:
                    errors.update(r)

        if errors:
            self.ok = False
            self.errors = errors
            self.data = new_data
        else:
            self.ok = True
            self.errors = {}
            self.data = result

        #the data of static field will be put into parsed data
        for k, v in self.fields.items():
            if v.static and k in old_data:
                self.data[k] = old_data[k]
        return self.ok

    def __str__(self):
        return self.html()

    def _repr_html_(self):
        return self.html()

    @property
    def form_begin(self):
        args = self.html_attrs.copy()
        args['action'] = self.form_action
        args['method'] = self.form_method
        for field_name, field in self.fields.items():
            if isinstance(field, FileField):
                args['enctype'] = "multipart/form-data"
                break
        return begin_tag('form', **args)

    @property
    def form_end(self):
        return '</form>\n'

    def get_buttons(self):
        return self._buttons

    def bind(self, data=None, errors=None):
        if data is not None:
            self.data = data
        if errors is not None:
            self.errors = errors

    def html(self):
        cls = get_form_layout_class(self.layout_class)
        layout = cls(self, self.layout, **self.layout_class_args)
        pre_html = self.pre_html() if hasattr(self, 'pre_html') else ''
        body = layout.html()
        post_html = self.post_html() if hasattr(self, 'post_html') else ''
        return ''.join([str(x) for x in [pre_html, body, post_html]])

    @property
    def build(self):
        cls = get_form_layout_class(self.layout_class)
        layout = cls(self, self.layout, **self.layout_class_args)
        result = FormBuild()
        result.pre_html = self.pre_html() if hasattr(self, 'pre_html') else ''
        result.begin = layout.begin()
        result.body = layout.hiddens() + layout.body()
        result.buttons = layout.buttons()
        result.buttons_line = layout.buttons_line()
        result.end = layout.end()
        result.post_html = self.post_html() if hasattr(self,
                                                       'post_html') else ''
        return result

    def get_json(self):
        return {
            'fields': self.get_fields(),
            'layout': self.get_layout(),
            'data': self.data,
            'rules': self.front_rules['rules'],
            'messages': self.front_rules['messages'],
        }

    def get_fields(self):
        s = []
        for f in self.fields_list:
            f[1].name = f[0]
            d = f[1].to_json(self.data.get(f[0]))
            s.append(d)
        return s

    def get_layout(self):
        if self.layout:
            return self.layout

        layout = []
        for x in self.fields_list:
            layout.append(x[0])
        layout = [tuple(layout)]
        return layout
示例#18
0
def call(args, options, global_options):
    global jobs, jobs_time

    from uliweb import settings
    from uliweb.utils.common import get_uuid

    signal.signal(signal.SIGINT, handler)
    signal.signal(signal.SIGTERM, handler)

    log.info('=============================')
    log.info(' Cron Job Daemon Starting')
    log.info('=============================')
    log.info('Daemon process %d' % os.getpid())

    init()

    if len(jobs_time) == 0:
        log.info("Job queue is empty")
    else:
        log.info("Job queue size is {}".format(len(jobs_time)))

    breakout = Breakout('cron_refresh')

    if hasattr(options, 'lock_timeout'):
        timeout = options.lock_timeout
    else:
        timeout = settings.get_var('CRON/lock_timeout', 60)

    if hasattr(options, 'debug'):
        debug = options.debug
    else:
        debug = False
    key = 'cron:cron_instance'
    value = get_uuid()

    log.info('Key=[{}/{}], lock_timeout={}, debug={}'.format(key, value, timeout, debug))

    spawn(continue_lock(key, value, timeout, debug))

    while not is_exit:
        try:
            waiting_lock(key, value, timeout, debug)
            if jobs_time:
                with breakout:
                    _time, _id = jobs_time[0]
                    job = jobs[_id]

                    now = date.now()
                    t = _time - time.mktime(now.timetuple())
                    if t <= 0:
                        #产生一个新的时间
                        jobs_time.pop(0)
                        _t = get_exe_time(job)
                        bisect.insort(jobs_time, (_t, _id))
                        #启动作业
                        start_job(job, now)
                    else:
                        log.info(u"Sleep {0} seconds will start job [{2} -- {1}] at {3}".format(t,
                                        job.time, job.title, now+datetime.timedelta(seconds=t)))
            else:
                t = 60
            time.sleep(t)
        except BreakoutException as e:
            init()
示例#19
0
def call(args, options, global_options):
    global jobs, jobs_time

    from uliweb import settings
    from uliweb.utils.common import get_uuid

    signal.signal(signal.SIGINT, handler)
    signal.signal(signal.SIGTERM, handler)

    log.info('=============================')
    log.info(' Cron Job Daemon Starting')
    log.info('=============================')
    log.info('Daemon process %d' % os.getpid())

    init()

    if len(jobs_time) == 0:
        log.info("Job queue is empty")
    else:
        log.info("Job queue size is {}".format(len(jobs_time)))

    breakout = Breakout('cron_refresh')

    if hasattr(options, 'lock_timeout'):
        timeout = options.lock_timeout
    else:
        timeout = settings.get_var('CRON/lock_timeout', 60)

    if hasattr(options, 'debug'):
        debug = options.debug
    else:
        debug = False
    key = 'cron:cron_instance'
    value = get_uuid()

    log.info('Key=[{}/{}], lock_timeout={}, debug={}'.format(
        key, value, timeout, debug))

    spawn(continue_lock(key, value, timeout, debug))

    while not is_exit:
        try:
            waiting_lock(key, value, timeout, debug)
            if jobs_time:
                with breakout:
                    _time, _id = jobs_time[0]
                    job = jobs[_id]

                    now = date.now()
                    t = _time - time.mktime(now.timetuple())
                    if t <= 0:
                        #产生一个新的时间
                        jobs_time.pop(0)
                        _t = get_exe_time(job)
                        bisect.insort(jobs_time, (_t, _id))
                        #启动作业
                        start_job(job, now)
                    else:
                        log.info(
                            u"Sleep {0} seconds will start job [{2} -- {1}] at {3}"
                            .format(t, job.time, job.title,
                                    now + datetime.timedelta(seconds=t)))
            else:
                t = 60
            time.sleep(t)
        except BreakoutException as e:
            init()