Пример #1
0
    def setup(self):
        self._task_list, self._task_list_lock = TaskListProctorFactory()()
        self._sssn_fctry = SQLAlchemySessionFactory()
        self._current_session = self._sssn_fctry.Session
        self._app_config = dinj.AppConfig()
        self._dispatch = {
            'UploadProcess_Image':self.on_new_image,
            'UploadProcess_Video':self.on_new_video
        }
        if not os.path.exists(self._app_config.AssetDepot):
            try:
                os.makedirs(self._app_config.AssetDepot)
            except:pass

        self._lock = threading.RLock()
Пример #2
0
class GobletUploadThread(threading.Thread):
    """ """
    AsyncFamily = 'Threading'

    def setup(self):
        self._task_list, self._task_list_lock = TaskListProctorFactory()()
        self._sssn_fctry = SQLAlchemySessionFactory()
        self._current_session = self._sssn_fctry.Session
        self._app_config = dinj.AppConfig()
        self._dispatch = {
            'UploadProcess_Image':self.on_new_image,
            'UploadProcess_Video':self.on_new_video
        }
        if not os.path.exists(self._app_config.AssetDepot):
            try:
                os.makedirs(self._app_config.AssetDepot)
            except:pass

        self._lock = threading.RLock()

    def on_new(self, task):
        return self._dispatch[task.Target](task)

    def on_new_image(self, task):
        """
            Pillow (PIL fork) could be used to 
            make thumbnails easier and more
            configurable
        """
        try:
            start = datetime.datetime.now()
            img = pil.Image.open(task.filepath)
            w, h = img.size
            _, ext = os.path.splitext(task.filepath)
            
            db_start = datetime.datetime.now()
            
            if self._current_session == None:
                self._current_session = self._sssn_fctry.Session
                
            asset = Asset(
                name=task.name,
                description=task.description,
                asset_name=task.asset_name,
                height=h, 
                width=w,  
                extention=ext[1:], 
                owner_id=task.owner_id)

            # save Asset
            asset.save(session=self._current_session)
            asset_id = asset.id

            new_path = ''
            
            if self._app_config.AssetDepot.startswith("s3://"):
                bucket_name = self._app_config.AssetDepot[5:]
                conn = S3Connection(
                    os.environ.get('AWS_ACCESS_KEY_ID'),
                    os.environ.get('AWS_SECRET_ACCESS_KEY')
                )
                asset_depot = conn.get_bucket(bucket_name)
                asset_depot_key = Key(asset_depot)
                new_path = task.access_token + '/' + str(asset.id)+ext
                asset_depot_key.key = new_path
                asset_depot_key.set_contents_from_filename(task.filepath)
            else:
                new_path = os.path.join(
                    self._app_config.AssetDepot,
                    task.access_token,
                    str(asset.id)+ext
                    )
                if not os.path.exists(os.path.dirname(new_path)):
                    try:
                        os.makedirs(os.path.dirname(new_path))
                    except:pass

                shutil.copy2(task.filepath, new_path)

            # Do something with new Asset, add to DB, etc..
            os.remove(task.filepath)
            
            return True

        except:
            print traceback.format_exc()
            try:
                self._current_session.close()
                time.sleep(2)
            except:
                pass
            return False

    def on_new_video(self, task):
        _, ext = os.path.splitext(task.filepath)
        sess = self._sssn_fctry.Session
        try:
            asset = Asset(
                name=task.name,
                description=task.description,
                asset_name=task.asset_name,
                height=0, 
                width=0,  
                extention=ext[1:], 
                owner_id=task.owner_id)
            asset.save(session=sess)
            asset_id = asset.id
            new_path = os.path.join(
                self._app_config.AssetDepot,
                task.access_token,
                str(asset.id)+ext
                )
            if not os.path.exists(os.path.dirname(new_path)):
                try:
                    os.makedirs(os.path.dirname(new_path))
                except:pass
            
            shutil.copy2(task.filepath, new_path)

            # Do something with new Asset, add to DB, etc..
            os.remove(task.filepath)
            
            return True

        except:
            print traceback.format_exc()
            return False
    
    def run(self):
        self.setup()
        sleep_x = 1
        to_close = set()
        while 1:
            try:
                if len(to_close) > 0:
                    try:
                        for i in range(0,10):
                            t = to_close.pop()
                            with self._task_list_lock:
                                self._task_list.ask_close(t)
                    except:
                        pass
            except:
                pass
            time.sleep(sleep_x)
            task = None
            with self._task_list_lock:
                task = self._task_list.ask_get()
            if task:
                sleep_x = 1
                if self.on_new(task):
                    to_close.add(task)
            else:
                sleep_x = 2
Пример #3
0
 def setup(self):
     self._task_list, self._task_list_lock = TaskListProctorFactory()()
     self._sssn_fctry = SQLAlchemySessionFactory()
     self._app_config = dinj.AppConfig()