Esempio n. 1
0
 def flush(self, path):
     '''
     Заставляет файл сохранить изменения.
     Делаем тут опасное допущение, что метод будет вызван всего один раз.
     В моем Debian Wheezy утилита cp v8.13 делает именно один вызов.
     Почему нельзя сделать все то же самое в методе release? Можно, но тогда cp не будет
     дожидаться завершения выгрузки фотографии на сервер.
     Было бы неплохо придумать, как переместить все в release и заставить cp дождаться
     окончания выгрузки.
     '''
     logger.debug('flushing %s', path)
     path = self._prepare_path(path)
     path_info = self._parse_path(path)
     if path_info.buffer is None:
         logger.warning('buffer for %s not opened yet', path)
         return -errno.EIO
     album_title, photo_title = self._split_path(path)
     album_list = AlbumList.get()
     album = album_list.albums[album_title]
     fileobj = path_info.buffer
     fileobj.flush()
     fileobj.seek(0)
     album.add(photo_title, fileobj.read())
     fileobj.close()
     del self._buffers[path]
Esempio n. 2
0
 def _getattr_for_root(self):
     '''
     Возвращает информацию для коревой директории.
     @return: Stat
     '''
     info = fuse.Stat()
     info.st_mode = stat.S_IFDIR | self._get_access_mode(True)
     album_list = AlbumList.get()
     # Для директорий высчитывается как 2 + количество поддиректорий:
     info.st_nlink = 2 + len(album_list.albums)
     context = self.GetContext()
     info.st_uid = context['uid']
     info.st_gid = context['gid']
     album_list = AlbumList.get()
     info.st_size = len(album_list.albums)
     return info
Esempio n. 3
0
 def mkdir(self, path, mode):
     '''
     Создает директорию.
     '''
     logger.debug('creating directory %s', path)
     path = self._prepare_path(path)
     path_info = self._parse_path(path)
     if path_info.album or path_info.photo:
         logger.warning('resource on %s already exists', path)
         return -errno.EEXIST
     album_list = AlbumList.get()
     album_list.add(path)
Esempio n. 4
0
 def rmdir(self, path):
     '''
     Удаляет директорию.
     '''
     logger.debug('removing directory %s', path)
     if not self._is_removing_allowed():
         logger.debug('removing not permitted, see --help')
         return -errno.EPERM
     path = self._prepare_path(path)
     path_info = self._parse_path(path)
     if path_info.album is None:
         return -errno.ENOTDIR
     album_list = AlbumList.get()
     album_list.remove(path_info.album.title)
Esempio n. 5
0
 def readdir(self, path, offset):
     '''
     Возвращает содержимое директории.
     '''
     # TODO: давать ссылки на вложенные альбомы
     logger.debug('reading directory %s', path)
     yield fuse.Direntry('.')
     yield fuse.Direntry('..')
     album_list = AlbumList.get()
     path = self._prepare_path(path)
     if not path:
         for album in album_list.albums.values():
             yield fuse.Direntry(album.title)
     else:
         album = album_list.albums[path]
         for photo in album.photos.values():
             yield fuse.Direntry(photo.title)
Esempio n. 6
0
 def unlink(self, path):
     '''
     Удаляет файл.
     '''
     logger.debug('removing file %s', path)
     if not self._is_removing_allowed():
         logger.debug('removing not permitted, see --help')
         return -errno.EPERM
     path = self._prepare_path(path)
     path_info = self._parse_path(path)
     if path_info.album:
         return -errno.EISDIR
     if path_info.photo is None:
         return -errno.ENOENT
     album_list = AlbumList.get()
     album_title, photo_title = self._split_path(path)
     album = album_list.albums[album_title]
     album.remove(photo_title)
Esempio n. 7
0
 def _parse_path(self, path):
     '''
     Разбирает путь и возвращает информацию относительно альбома и фотографии,
     которые могут находиться по этому пути.
     @param path: string
     @return: PathInfo
     '''
     album_list = AlbumList.get()
     if os.path.splitext(path)[1].lower() == '.jpg':
         if path in self._buffers:
             return PathInfo(buffer=self._buffers[path])
         album_title, photo_title = self._split_path(path)
         album = album_list.albums.get(album_title)
         if album is None:
             return PathInfo()
         photo = album.photos.get(photo_title)
         if photo:
             return PathInfo(photo=photo)
         return PathInfo()
     album = album_list.albums.get(path)
     if album:
         return PathInfo(album=album)
     return PathInfo()
Esempio n. 8
0
#!/usr/bin/python
# encoding=utf8
'''
Скрипт для проверки, есть ли доступ к аккаунту.
@author: Mic, 2012
'''

from dm_yf.log import logger
from dm_yf.models import AlbumList

album_list = AlbumList.get()
logger.info('now you have access to Fotki account')
logger.info('you have %s albums', len(album_list.albums))