Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import re
- import ctypes
- import shutil
- import maya.cmds
- __version__ = '0.1.3'
- class Backup( object ):
- def __init__( self , prefix='v' , seperator=' ' , padding=3 ):
- """Saves out an incremented backup file of your scene
- -Prefix sets the prefix before the versioning increment name.
- -Seperator is set to determine the naming convention seperator.
- -Padding sets the number of digits to use in the version name.
- """
- self.name = 'Saviour'
- self.prefix = prefix
- self.padding = padding
- self.seperator = seperator
- self.extension = {'mayaBinary' : 'mb' , 'mayaAscii' : 'ma' }
- def clean_seperator( self , name ):
- """Replaces seperators within a file name"""
- __version__ = '1.0.0'
- name , ext = os.path.splitext( name )
- if ext:
- return '.'.join( [ re.sub( r'[^a-zA-Z0-9]+' , self.seperator , name ) , ext ] )
- else:
- return re.sub( r'[^a-zA-Z0-9]+' , self.seperator , name )
- def get_version( self , name , path ):
- """Returns a valid version number for a given path"""
- __version__ = '0.1.0'
- format_ext = '.mb'
- backups = []
- for filename in os.listdir(path):
- rawname , ext = os.path.splitext( filename )
- if format_ext==ext:
- if filename.startswith( rawname ):
- if rawname[ -( self.padding ) ].isdigit() and rawname[ -( self.padding ) - len( self.prefix ) ].isalpha():
- if rawname[-(self.padding)-len(self.prefix):-self.padding] == self.prefix:
- backups.append( filename )
- try:
- last_backup = backups[-1]
- except IndexError as e:
- last_backup=None
- if last_backup:
- name , ext = os.path.splitext( last_backup )
- p = self.prefix
- L = len(self.prefix)
- new = int( [ n for n in name.split( self.seperator ) if str( n )[ :L ] == ( p ) ][ -1 ][ L: ] ) + 1
- return ''.join( [ self.prefix , str( new ).zfill( self.padding ) ] )
- else:
- return ''.join( [ self.prefix , '1'.zfill( self.padding ) ] )
- def save( self , filerule='offlineEdit' , type='mayaBinary' , name=False ):
- """Places a saved out scene on disk
- -filerule argument sets the location of the backups based off a given workspace filerule.
- -Type argument can be mayaBinary or mayaAscii.
- -Use name to set our scene name, if no name is given and it's the first save, the default save dialog opens up.
- """
- __version__ = '0.1.0'
- root = maya.cmds.workspace( query=True , rootDirectory=True )
- filerule = maya.cmds.workspace( filerule , query=True , fre=True )
- path = os.path.join( root , filerule )
- if not name:
- name = ''.join( os.path.splitext( maya.cmds.file( query=True , shortName=True , sceneName=True ) )[ :-1 ] )
- name = self.clean_seperator( name )
- maya.cmds.file( rename=name )
- current = maya.cmds.file( save=True , type=type )
- version = self.get_version( name , path )
- destination = '%s%s%s.%s' % ( os.path.join( path , name ) , self.seperator , version , self.extension[ type ] )
- ctypes.windll.kernel32.CreateHardLinkA( str(destination) , str(current) , 0 )
- return current , destination , version
- if __name__ == '__main__':
- __oo__ = Backup()
- current , backup , version = __oo__.save()
- print ( '--[ File saved:' , current )
- print ( '--[ Version:' , version )
Advertisement
Add Comment
Please, Sign In to add comment