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())
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())
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)
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)
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)
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)
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
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)
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)
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)