Example #1
0
 def save_model(self, request, obj, form, change):
     super(MiddleWareAdmin, self).save_model(request, obj, form, change)
     middle_ware = importlib.import_module(obj.name)
     # if it's filter
     if change and hasattr(middle_ware, 'on_upgrade'):
         middle_ware.on_upgrade(get_middle_ware_connection(),
                 form.previous_version)
     elif not change and hasattr(middle_ware, 'on_install'):
         middle_ware.on_install(get_middle_ware_connection())
Example #2
0
 def save_model(self, request, obj, form, change):
     super(MiddleWareAdmin, self).save_model(request, obj, form, change)
     middle_ware = importlib.import_module(obj.name)
     # if it's filter
     if change and hasattr(middle_ware, 'on_upgrade'):
         middle_ware.on_upgrade(get_middle_ware_connection(),
                                form.previous_version)
     elif not change and hasattr(middle_ware, 'on_install'):
         middle_ware.on_install(get_middle_ware_connection())
Example #3
0
 def delete_model(self, request, obj):
     try:
         middle_ware = importlib.import_module(obj.name)
         if hasattr(middle_ware, 'on_uninstall'):
             middle_ware.on_uninstall(get_middle_ware_connection())
     except Exception as e:
         # falling silently
         print e
     finally:
         MiddleWareMountOptions.objects.filter(
             middle_ware__id=obj.id).delete()
         super(MiddleWareAdmin, self).delete_model(request, obj)
         middle_ware_root = os.path.join(
             settings.SOKOBAN_MIDDLE_WARE_ROOT, obj.name)
         shutil.rmtree(middle_ware_root)
Example #4
0
 def delete_model(self, request, obj):
     try:
         middle_ware = importlib.import_module(obj.name)
         if hasattr(middle_ware, 'on_uninstall'):
             middle_ware.on_uninstall(get_middle_ware_connection())
     except Exception as e:
         # falling silently
         print e
     finally:
         MiddleWareMountOptions.objects.filter(
             middle_ware__id=obj.id).delete()
         super(MiddleWareAdmin, self).delete_model(request, obj)
         middle_ware_root = os.path.join(settings.SOKOBAN_MIDDLE_WARE_ROOT,
                                         obj.name)
         shutil.rmtree(middle_ware_root)
Example #5
0
def clean_project(project):
    conn = get_middle_ware_connection()
    for mw in project.middlewaremountoptions_set.all():
        # noinspection PyBroadException
        try:
            mw_module = importlib.import_module(mw.name)
            mw_module.on_project_delete(conn, project.id)
        except:
            continue
    conn.close()
    working_root = os.path.join(settings.SOKOBAN_WORKING_DIRECTORY, project.id)
    working_tree_root = os.path.join(settings.SOKOBAN_WORKING_TREE_DIRECTORY,
                                     project.id)
    core_vcs_root = os.path.join(settings.SOKOBAN_VCS_DIRECTORY, project.id)
    shutil.rmtree(working_root, True)
    shutil.rmtree(working_tree_root, True)
    shutil.rmtree(core_vcs_root, True)
Example #6
0
def clean_project(project):
    conn = get_middle_ware_connection()
    for mw in project.middlewaremountoptions_set.all():
        # noinspection PyBroadException
        try:
            mw_module = importlib.import_module(mw.name)
            mw_module.on_project_delete(conn, project.id)
        except:
            continue
    conn.close()
    working_root = os.path.join(settings.SOKOBAN_WORKING_DIRECTORY,
                                project.id)
    working_tree_root = os.path.join(
        settings.SOKOBAN_WORKING_TREE_DIRECTORY, project.id)
    core_vcs_root = os.path.join(settings.SOKOBAN_VCS_DIRECTORY, project.id)
    shutil.rmtree(working_root, True)
    shutil.rmtree(working_tree_root, True)
    shutil.rmtree(core_vcs_root, True)
Example #7
0
def installed_middle_ware(request):
    installed_ware = MiddleWare.objects.all()
    parsed_wares = []
    for ware in installed_ware:
        parsed_ware = {
            "id": ware.pk,
            "name": ware.name,
            "type": ware.type,
            "author": ware.author,
            "version": ware.version,
        }
        model = importlib.import_module(ware.name)
        if callable(model.form):
            parsed_ware["form"] = model.form(
                db=get_middle_ware_connection(), user_id=request.user.pk)
        else:
            parsed_ware["form"] = model.form
        parsed_wares.append(parsed_ware)
    return parsed_wares
Example #8
0
def update_option(request, option):
    option_form = ProjectOptionForm(request.POST, instance=option)
    if not option_form.is_valid():
        return {
            'errors': option_form.errors.as_ul(),
        }, 400
    option = option_form.save(commit=False)
    middle_ware = importlib.import_module(option.middle_ware.name)
    try:
        if hasattr(middle_ware, 'on_bind'):
            option.options = middle_ware.on_bind(
                db=get_middle_ware_connection(), obj=option.options,
                user_id=request.user.pk, project_id=option.owner_project_id)
    except Exception as e:
        return {
            'errors': str(e)
        }, 500
    option.save()
    return ls_option(instance=option)
Example #9
0
def sync_project(project_id):
    try:
        project = models.Project.objects.filter(id=project_id).get()
    except models.Project.DoesNotExist:
        raise KeyError('Cannot find the specified project!!!')
    lock_dir = settings.SYNCHRONIZATION_LOCK_DIR
    if not os.path.exists(lock_dir):
        os.mkdir(lock_dir, 0700)
    lock_file = os.path.join(lock_dir, project_id + '.lock')
    task_lock = open(lock_file, 'w')
    try:
        fcntl.flock(task_lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
    except IOError as e:
        task_lock.close()
        if e.errno == errno.EACCES or e.errno == errno.EAGAIN:
            try:
                task_begin = time.ctime(os.path.getmtime(lock_file))
            except OSError:
                task_begin = 'unknown time, maybe just finished?'
            raise Exception('Previous task (start at %s) is still running' %
                            task_begin)
        else:
            raise Exception(
                'unable to lock the task, contact administrator please.')
    logger = SyncLogger(project)
    logger.set_level(project.log_level)
    logger.info('begin synchronizing project %s...' % project.name)
    conn = get_middle_ware_connection()
    try:
        begin_task(project, conn, logger)
        logger.info('done.')
    except Exception as e:
        logger.error('catch exception %s' % str(e))
        logger.error('synchronization of %s abort!' % project.name)
        raise
    finally:
        fcntl.flock(task_lock, fcntl.LOCK_UN)
        task_lock.close()
        project.save()
        conn.close()
    if project.schedule.attached_job.next_run_time:
        logger.info('next run at %s' %
                    project.schedule.attached_job.next_run_time)
Example #10
0
def sync_project(project_id):
    try:
        project = models.Project.objects.filter(id=project_id).get()
    except models.Project.DoesNotExist:
        raise KeyError('Cannot find the specified project!!!')
    lock_dir = settings.SYNCHRONIZATION_LOCK_DIR
    if not os.path.exists(lock_dir):
        os.mkdir(lock_dir, 0700)
    lock_file = os.path.join(lock_dir, project_id + '.lock')
    task_lock = open(lock_file, 'w')
    try:
        fcntl.flock(task_lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
    except IOError as e:
        task_lock.close()
        if e.errno == errno.EACCES or e.errno == errno.EAGAIN:
            try:
                task_begin = time.ctime(os.path.getmtime(lock_file))
            except OSError:
                task_begin = 'unknown time, maybe just finished?'
            raise Exception(
                'Previous task (start at %s) is still running' % task_begin)
        else:
            raise Exception(
                'unable to lock the task, contact administrator please.')
    logger = SyncLogger(project)
    logger.set_level(project.log_level)
    logger.info('begin synchronizing project %s...' % project.name)
    conn = get_middle_ware_connection()
    try:
        begin_task(project, conn, logger)
        logger.info('done.')
    except Exception as e:
        logger.error('catch exception %s' % str(e))
        logger.error('synchronization of %s abort!' % project.name)
        raise
    finally:
        fcntl.flock(task_lock, fcntl.LOCK_UN)
        task_lock.close()
        project.save()
        conn.close()
    if project.schedule.attached_job.next_run_time:
        logger.info('next run at %s' % project.schedule.attached_job.next_run_time)