Advertisement
Guest User

Untitled

a guest
Sep 14th, 2011
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.59 KB | None | 0 0
  1. from time import sleep
  2. #from fs.osfs import OSFS
  3. #from fs.expose import fuse
  4. from fs.memoryfs import MemoryFS
  5. from multiprocessing.managers import BaseManager
  6. from multiprocessing import Process, get_logger
  7.  
  8. class data(object):
  9.     def __init__(self, fspath='tmpramfs'):
  10.         self.ofiles = list()
  11.         self.fname = fspath
  12. #       self.homefs = OSFS('/tmp')
  13. #       self.homefs.makedir(
  14. #           self.fname,
  15. #           allow_recreate=True)
  16.         self.memoryfs = MemoryFS()
  17.         self.memoryfs.makedir('testing')
  18. #       self.mount = fuse.mount(
  19. #               self.memoryfs,
  20. #               '/tmp/xmond_tmpramfs')
  21.  
  22.     def internalLock(self, Argument):
  23.         for _ in range(1000):
  24.             if not Argument in self.ofiles:
  25.                 self.ofiles.append(Argument)
  26.                 return
  27.             sleep(.005)
  28.         return
  29.  
  30.     def finish(self):
  31.         self.mount.umount()
  32.         return
  33.  
  34.     def exists(self, Argument):
  35.         if self.isDir(Argument) or self.isFile(Argument):
  36.             return True
  37.         return False
  38.  
  39.     def isFile(self, Argument):
  40.         if self.memoryfs.isfile(Argument):
  41.             return True
  42.         return False
  43.  
  44.     def isDir(self, Argument):
  45.         if self.memoryfs.isdir(Argument):
  46.             return True
  47.         return False
  48.  
  49.     def tree(self, Argument=False):
  50.         if not Argument:
  51.             tmpResult = []
  52.             _walk = self.memoryfs.walk()
  53.             while True:
  54.                 try: tmpResult.append(_walk.next())
  55.                 except: return tmpResult
  56.            
  57.             tmpResult = self.memoryfs.tree()
  58.             return tmpResult
  59.             return self.memoryfs.tree()
  60.         if self.memoryfs.isdir(Argument):
  61.             return self.memoryfs.tree(Argument)
  62.         return False
  63.  
  64.     def get(self, Argument):
  65.         if self.memoryfs.isfile(Argument):
  66.             self.internalLock(Argument)
  67.             try: tmpDataFile = self.memoryfs.open(Argument, 'r')
  68.             except: self._unlock(Argument)
  69.             else:
  70.                 tmpData = tmpDataFile.read()
  71.                 tmpDataFile.close()
  72.                 self._unlock(Argument)
  73.                 return tmpData
  74.         return False
  75.  
  76.     def close(self, Argument):
  77.         if Argument in self.ofiles:
  78.             try: self.memoryfs.close(Argument)
  79.             except: return False
  80.             self._unlock(Argument)
  81.             return True
  82.         return False
  83.  
  84.     def open(self, Argument, rw='rb'):
  85.         if self.memoryfs.isfile(Argument):
  86.             self.internalLock(Argument)
  87.             try: tmpfh = self.memoryfs.open(Argument, rw)
  88.             except: return False
  89.             else:
  90.                 self.ofiles.append(Argument)
  91.                 return tmpfh
  92.         return False
  93.  
  94.     def create(self, Argument, Value=None):
  95.         return self.set(Argument, Value)
  96.  
  97.     def _unlock(self, Argument):
  98.         if Argument in self.ofiles:
  99.             self.ofiles.remove(Argument)
  100.         return
  101.  
  102.     def remove(self, Argument):
  103.         return self.delete(Argument)
  104.  
  105.     def delete(self, Argument):
  106.         if self.exists(Argument):
  107.             self.internalLock(Argument)
  108.             if self.isDir(Argument):
  109.                 self.memoryfs.removedir(Argument,
  110.                     recursive=False, force=True)
  111.                 self._unlock(Argument)
  112.                 return True
  113.             elif self.isFile(Argument):
  114.                 self.memoryfs.remove(Argument)
  115.                 self._unlock(Argument)
  116.                 return True
  117.         self._unlock(Argument)
  118.         return False
  119.  
  120.     def set(self, Argument, Value=None):
  121.         if len(Argument) <= 1:
  122.             return False
  123.        
  124.         if not Value:
  125.             if self.memoryfs.isdir(Argument):
  126.                 return True
  127.             elif self.memoryfs.isfile(Argument):
  128.                 return False
  129.             self.memoryfs.makedir(Argument,
  130.                     allow_recreate=True,
  131.                     recursive=True)
  132.             return True
  133.        
  134.         if self.memoryfs.isdir(Argument):
  135.             return False
  136.        
  137.         self.internalLock(Argument)
  138.        
  139.         tmppath = "/".join(Argument.split('/')
  140.                 )[:-len(Argument.split('/')[-1]
  141.                 )-1].replace('//', '/')
  142.         if not self.memoryfs.isdir(tmppath):
  143.             self.memoryfs.makedir(tmppath,
  144.                     allow_recreate=True,
  145.                     recursive=True)
  146.        
  147.         if not self.memoryfs.isfile(Argument):
  148.             try: self.memoryfs.createfile(Argument, repr(Value))
  149.             except:
  150.                 self._unlock(Argument)
  151.                 return False
  152.        
  153.         try: tmpDataFile = self.memoryfs.open(Argument, 'rw')
  154.         except:
  155.             self._unlock(Argument)
  156.             return False
  157.         else:
  158.             tmpDataFile.write(repr(Value))
  159.             tmpDataFile.close()
  160.             self._unlock(Argument)
  161.             return True
  162.        
  163.         self._unlock(Argument)
  164.         return False
  165.  
  166.  
  167. class DataManager(BaseManager): pass
  168.  
  169.  
  170. class DataProcess(Process):
  171.     def __init__(self, authkey, public):
  172.         Process.__init__(self)
  173.         self.authkey = authkey
  174.         self.dataS = data()
  175.         self.daemon = True
  176.         self.addr = '127.0.0.1'
  177.         if public:
  178.             self.addr = '0.0.0.0'
  179.  
  180.     def run(self):
  181.         DataManager.register('get_data',
  182.             callable=lambda:self.dataS)
  183.         datamgr = DataManager(
  184.             address = (self.addr, 7349),
  185.             authkey = self.authkey)
  186.        
  187.         datasrv = datamgr.get_server()
  188.         datasrv.serve_forever()
  189.  
  190.  
  191.  
  192. def create(authkey, public=False):
  193.     try:
  194.         DP = DataProcess(authkey, public)
  195.         DP.start()
  196.     except: return False
  197.    
  198.     return True
  199.  
  200.  
  201. create('authKey')
  202. while True:
  203.     sleep(600)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement