Files
JIMRI/java/Translatingscripts/directorymanager.py
T
2026-06-17 14:00:51 +02:00

229 lines
7.8 KiB
Python

#!/usr/bin/pythonw
# This file is part of JMRI.
#
# JMRI is free software; you can redistribute it and/or modify it under
# the terms of version 2 of the GNU General Public License as published
# by the Free Software Foundation. See the "COPYING" file for a copy
# of this license.
#
# JMRI is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# Revision $Revision$
# by Simon Ginsburg (simon.ginsburg at bluewin.ch)
"""
This module represents the directory manager to be used with the translation utility
This module hast three major functionalities:
- Storage of all project relevant directory path's
- Internal representation of a tree like
directory structure into a linear form
- Transforming path names from the tree structure
into the linear representation and vice versa
"""
import os
import re
from datetime import date
from datetime import datetime
class directorymanager:
def __init__(self):
"""
Initialize all required directories based on the current path
At initialisation time the following path names will be defined:
- Progpath: Where the program is stored
- Abspath: The "java" subdirectory of the JMRI project
- Startpath: The "src" subdirectory of the JMRI project
- Destpath: The "translation" subdirectory where all internal files
of the translation project are stored
- Defpath: The "Defaults" subdirectory where all defaults are stored
- Refdir: The "Ref" subdirectory where the reference data is stored
- Currdir: The "Curr" subdirectory where all current data is stored
- Testdir: The "Test" subdirectory where all test files are stored
- Importdir: The "Import" subdirectory where translated files are stored
Also a list of regular expression patterns are defined.
"""
self.Progpath = os.getcwd()
##self.Progpath = os.path.normpath(os.path.join(os.getcwd(),"Def"))
self.Abspath = os.path.normpath(os.path.join(os.getcwd(),os.pardir))
self.Startpath = os.path.join(self.Abspath,"src")
#Startstring = str(self.Startpath)
self.Lineseparator = str(os.linesep)
self.Startpat = re.compile(str(self.Startpath))
self.Slashpat = re.compile(os.path.sep)
self.Dashpat = re.compile("-")
self.Dotpat = re.compile(".")
self.Linendpat = re.compile("\\\\")
self.Startdotpat = re.compile("^.")
self.delimiter = ";"
self.currlist = ""
self.Destpath = os.path.join(self.Abspath,"translation")
if not os.path.exists(self.Destpath):
os.mkdir(self.Destpath)
self.Defpath = os.path.join(self.Destpath,"Defaults")
self.Currdir = os.path.join(self.Destpath, "Curr")
self.Refdir = os.path.join(self.Destpath, "Ref")
self.Testdir = os.path.join(self.Destpath, "Test")
self.Importdir = os.path.join(self.Destpath, "Import")
def getfullname(self, dirname, trunkname):
"""
Return full file name combining the directory path and the filename
"""
dirstr = re.sub(self.Dashpat, "", re.sub(self.Slashpat, "-", re.sub(self.Startpat, "", str(dirname))),1)
fullfilename = dirstr + "-" + trunkname + ".txt"
#print fullfilename
return fullfilename
def getinfo(self, fullname):
"""
Return full directory information
Returns several information based on the fullfilename:
- filename
- directory path
- corename
- trunkname
- key
"""
temp1 = str(fullname).split(".", 1)
temp2 = str(temp1[0]).split("_", 1)
dirstr = re.sub(self.Dashpat, str(os.path.sep), fullname)
dirname = os.path.dirname((self.Startpath + str(os.path.sep) + dirstr))
corename = temp2[0]
if len(temp2) > 1:
key = temp2[1]
else:
key = ""
temp3 = str(temp1[0]).rsplit("-", 1)
trunkname = temp3[0]
if len(temp3) > 1:
trunkname = temp3[1]
filename = temp3[1] + ".properties"
else:
trunkname =""
filename =""
return filename, dirname, corename, trunkname, key
def getfilename(self, fullname):
"""
Return appropriate filename
"""
#print fullname
tempname = fullname.rsplit("-",1)
#print tempname
if len(tempname) > 1:
filename = tempname[1] + ".properties"
else:
filename =""
return filename
def gettoday(self):
"""
Return String containing today's date
"""
return str(date.today())
def gotodaydir(self):
"""
Return directory path containing today's date
"""
todaystr = str("Status_" + str(date.today()))
self.Todaypath = os.path.join(self.Destpath,todaystr)
if not os.path.exists(self.Todaypath):
os.mkdir(self.Todaypath)
os.chdir(self.Todaypath)
def getnext(self,checkname):
"""
Return fullname, append numbering if required to find a free one
"""
#path = os.getcwd()
filename = str(checkname + ".txt")
fullname = os.path.join(os.getcwd(), filename)
if os.path.exists(fullname):
idx = 1
fullname = os.path.join(os.getcwd(),str(checkname + "_" + str(idx)) + ".txt")
while os.path.exists(fullname):
idx = idx + 1
fullname = os.path.join(os.getcwd(),str(checkname + "_" + str(idx)) + ".txt")
return fullname
def gosubdir(self,subdirname, overwrite = 1):
"""
Navigate to the indicated subdirectory
"""
fullpath = os.path.join(os.getcwd(),subdirname)
if overwrite:
os.mkdir(fullpath)
else:
if os.path.exists(fullpath):
idx = 1
fullpath = os.path.join(os.getcwd(),str(subdirname + "_" + str(idx)))
while os.path.exists(fullpath):
idx = idx + 1
fullpath = os.path.join(os.getcwd(),str(subdirname + "_" + str(idx)))
os.mkdir(fullpath)
os.chdir(fullpath)
def getnow(self):
"""
Return today's date
"""
return str(datetime.now())
def getcorename(self, fullname):
"""
Extract corename from fullname
"""
temp1 = str(fullname).split(".", 1)
temp2 = str(temp1[0]).split("_", 1)
corename = temp2[0]
return corename
def gettrunkname(self, fullname):
"""
Extract trunkname from fullname
"""
temp1 = str(fullname).split(".", 1)
temp2 = str(temp1[0]).split("_", 1)
temp3 = str(temp2[0]).rsplit("-", 1)
if len(temp3) > 1:
trunkname = temp3[1]
else:
trunkname =""
return trunkname
def getkey(self, fullname):
"""
Extract the language key from fullname
"""
temp1 = str(fullname).split(".", 1)
temp2 = str(temp1[0]).split("_", 1)
corename = temp2[0]
if len(temp2) > 1:
key = temp2[1]
else:
key = ""
return key
def getdirectorystring(self, fullname):
"""
Reconstruct the directory string from the fullname
"""
dirstr = re.sub(self.Dashpat, str(os.path.sep), fullname)
directorystring = os.path.dirname((self.Startpath + str(os.path.sep) + dirstr))
return directorystring
if __name__ == "__main__":
import doctest
doctest.testmod()