#!/usr/bin/env python

# sudo ./hola.py -o nonempty b

import os, stat, errno
import fuse
from fuse import Fuse

fuse.fuse_python_api = (0, 2)

class Stat_Fichero (fuse.Stat):
 def __init__(self):
  self.st_mode = 0777
  self.st_ino = 0
  self.st_dev = 0
  self.st_nlink = 0
  self.st_uid = 1003
  self.st_gid = 1006
  self.st_size = 0
  self.st_atime = 0
  self.st_mtime = 0
  self.st_ctime = 0

ruta = "/hola.txt"
cadena = "Hola Linux Magazine\n"

class HolaFS(Fuse):

 def getattr(self, path):
  st = Stat_Fichero()
  if path == '/':
   st.st_mode = stat.S_IFDIR | 0755
   st.st_nlink = 1
  else:
   st.st_mode = stat.S_IFREG | 0444
   st.st_nlink = 1
   st.st_size = len(cadena)
  return st

 def readdir(self, path, offset):
  for path in ['.','..',ruta]:
   yield fuse.Direntry(path)

 def open(self, path, flags):
  if path != ruta :
   return -errno.ENOENT
  else:
   accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
   if (flags & accmode) != os.O_RDONLY:
    return -errno.EACCES

 def read(self, path, size, offset):
  if path != ruta:
   return -errno.ENOENT
  else:
   slen = len(cadena)
   if offset < slen:
    if offset + size > slen:
     size = slen - offset
    buf = cadena[offset:offset+size]

   else:
    buf = ''

   return buf

def main():
 uso="""
Sistema de ficheros para webs

""" + Fuse.fusage
 server = HolaFS(version="%prog " + fuse.__version__,
      usage=uso,
      dash_s_do='setsingle')
 server.parse(errex=1)
 server.main()

if __name__ == '__main__':
 main()
