Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit43a64c0

Browse files
author
d.kovalenko
committed
ConfigurationOsFile is added
1 parentd7139b9 commit43a64c0

File tree

6 files changed

+219
-62
lines changed

6 files changed

+219
-62
lines changed

‎src/implementation/v00/configuration_base.py‎

Lines changed: 24 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@
5858
from ...core.bugcheck_errorimportBugCheckError
5959
# fmt: on
6060

61+
from ...os.abstract.configuration_os_opsimportConfigurationFileReader
62+
from ...os.abstract.configuration_os_opsimportConfigurationOsFile
6163
from ...os.abstract.configuration_os_opsimportConfigurationOsOps
6264

6365
importtyping
64-
importos
65-
importio
6666
importdatetime
6767

6868
# //////////////////////////////////////////////////////////////////////////////
@@ -3223,17 +3223,14 @@ def LoadConfigurationFile(
32233223
# load content
32243224
# process content
32253225

3226-
withopen(currentFileData.m_Path)asf:
3227-
assertisinstance(f,io.TextIOBase)
3226+
withcfg.m_Data.OsOps.OpenFileToRead(currentFileData.m_Path)asf:
3227+
assertisinstance(f,ConfigurationOsFile)
32283228
currentFile=PostgresConfigurationFactory_Base.GetObject(
32293229
cfg,currentFileData
32303230
)
32313231
__class__.Helper__LoadFileContent(currentFile,f)# raise
32323232

3233-
fd=f.fileno()
3234-
asserttype(fd)==int
3235-
3236-
lastMDate=datetime.datetime.fromtimestamp(os.path.getmtime(fd))
3233+
lastMDate=f.GetModificationTS()
32373234
asserttype(lastMDate)==datetime.datetime
32383235

32393236
currentFileData.m_LastModifiedTimestamp=lastMDate
@@ -3289,23 +3286,23 @@ def LoadConfigurationFile(
32893286

32903287
# --------------------------------------------------------------------
32913288
defLoadFileContent(
3292-
file:PostgresConfigurationFile_Base,fileContent:io.TextIOBase
3289+
file:PostgresConfigurationFile_Base,fileContent:ConfigurationFileReader
32933290
)->None:
32943291
assertisinstance(file,PostgresConfigurationFile_Base)
3295-
assertisinstance(fileContent,io.TextIOBase)
3292+
assertisinstance(fileContent,ConfigurationFileReader)
32963293

32973294
return__class__.Helper__LoadFileContent(file,fileContent)
32983295

32993296
# Helper methods -----------------------------------------------------
33003297
defHelper__LoadFileContent(
3301-
file:PostgresConfigurationFile_Base,fileContent:io.TextIOBase
3298+
file:PostgresConfigurationFile_Base,fileContent:ConfigurationFileReader
33023299
)->None:
33033300
assertisinstance(file,PostgresConfigurationFile_Base)
3304-
assertisinstance(fileContent,io.TextIOBase)
3301+
assertisinstance(fileContent,ConfigurationFileReader)
33053302

33063303
lineReader=ReadUtils__LineReader()
33073304

3308-
whilelineData:=fileContent.readline():
3305+
whilelineData:=fileContent.ReadLine():
33093306
asserttype(lineData)==str
33103307

33113308
lineReader.SetData(lineData)
@@ -3727,7 +3724,7 @@ def Helper__ProcessLineData__Option__Generic(
37273724
classPostgresConfigurationWriterFileCtx_Base:
37283725
FileData:PgCfgModel__FileData
37293726
Content:typing.Optional[str]
3730-
File:typing.Optional[io.TextIOWrapper]
3727+
File:typing.Optional[ConfigurationOsFile]
37313728

37323729
# TODO: We can use filelock (it is a separated lock file)
37333730
# to provide an exclusive access to our File
@@ -3891,15 +3888,12 @@ def Helper__DoWork__Stage03__OpenUpdFilesToWrite(
38913888
assertfileCtx.FileisNone
38923889

38933890
# Let's open an exist file to read and write without truncation
3894-
fileCtx.File=open(fileCtx.FileData.m_Path,"r+")# raise
3891+
fileCtx.File=ctx.Cfg.m_Data.OsOps.OpenFileToWrite(fileCtx.FileData.m_Path)# raise
38953892

38963893
assertfileCtx.FileisnotNone
3897-
assertisinstance(fileCtx.File,io.TextIOWrapper)
3898-
3899-
fd=fileCtx.File.fileno()
3900-
asserttype(fd)==int
3894+
assertisinstance(fileCtx.File,ConfigurationOsFile)
39013895

3902-
lastMDate=datetime.datetime.fromtimestamp(os.path.getmtime(fd))
3896+
lastMDate=fileCtx.File.GetModificationTS()
39033897
asserttype(lastMDate)==datetime.datetime
39043898

39053899
iffileCtx.FileData.m_LastModifiedTimestamp!=lastMDate:
@@ -3937,10 +3931,10 @@ def Helper__DoWork__Stage04__OpenNewFilesToWrite(
39373931
assertfileCtx.FileData.m_Status==PgCfgModel__FileStatus.IS_NEW
39383932
assertfileCtx.FileisNone
39393933

3940-
fileCtx.File=open(fileCtx.FileData.m_Path,"x")# raise
3934+
fileCtx.File=ctx.Cfg.m_Data.OsOps.CreateFile(fileCtx.FileData.m_Path)# raise
39413935

39423936
assertfileCtx.FileisnotNone
3943-
assertisinstance(fileCtx.File,io.TextIOWrapper)
3937+
assertisinstance(fileCtx.File,ConfigurationOsFile)
39443938

39453939
# OK
39463940
continue
@@ -3959,16 +3953,16 @@ def Helper__DoWork__Stage04__OpenNewFilesToWrite(
39593953

39603954
assertfileCtx.FileData.m_Status==PgCfgModel__FileStatus.IS_NEW
39613955
assertfileCtx.FileisnotNone
3962-
assertisinstance(fileCtx.File,io.TextIOWrapper)
3956+
assertisinstance(fileCtx.File,ConfigurationOsFile)
39633957

3964-
assertnotfileCtx.File.closed
3958+
assertnotfileCtx.File.IsClosed
39653959

3966-
filePath=fileCtx.File.name
3960+
filePath=fileCtx.File.Name
39673961
assertfilePathisnotNone
39683962
asserttype(filePath)==str
39693963
assertfilePath==fileCtx.FileData.m_Path
39703964

3971-
fileCtx.File.close()# raise
3965+
fileCtx.File.Close()# raise
39723966

39733967
ctx.Cfg.m_Data.OsOps.Remove(filePath)# raise
39743968
continue
@@ -3992,22 +3986,17 @@ def Helper__DoWork__Stage05__WriteContents(
39923986
asserttype(fileCtx.FileData)==PgCfgModel__FileData
39933987

39943988
assertfileCtx.FileisnotNone
3995-
assertisinstance(fileCtx.File,io.TextIOWrapper)
3989+
assertisinstance(fileCtx.File,ConfigurationOsFile)
39963990

39973991
assertfileCtx.ContentisnotNone
39983992
asserttype(fileCtx.Content)==str
39993993

4000-
fileCtx.File.write(fileCtx.Content)
4001-
fileCtx.File.truncate()
4002-
fileCtx.File.flush()
4003-
4004-
fd=fileCtx.File.fileno()
4005-
asserttype(fd)==int
3994+
fileCtx.File.Overwrite(fileCtx.Content)
40063995

4007-
lastMDate=datetime.datetime.fromtimestamp(os.path.getmtime(fd))
3996+
lastMDate=fileCtx.File.GetModificationTS()
40083997
asserttype(lastMDate)==datetime.datetime
40093998

4010-
fileCtx.File.close()
3999+
fileCtx.File.Close()
40114000

40124001
fileCtx.FileData.m_LastModifiedTimestamp=lastMDate
40134002
fileCtx.FileData.m_Status=PgCfgModel__FileStatus.EXISTS

‎src/os/abstract/configuration_os_ops.py‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,45 @@
55

66
from ...core.raise_errorimportRaiseError
77

8+
importdatetime
9+
10+
11+
# //////////////////////////////////////////////////////////////////////////////
12+
# class ConfigurationFileReader
13+
14+
15+
classConfigurationFileReader:
16+
defReadLine(self)->str:
17+
RaiseError.MethodIsNotImplemented(__class__,"ReadLine")
18+
19+
20+
# //////////////////////////////////////////////////////////////////////////////
21+
# class ConfigurationOsFile
22+
23+
24+
classConfigurationOsFile(ConfigurationFileReader):
25+
def__init__(self):
26+
pass
27+
28+
@property
29+
defName(self)->str:
30+
RaiseError.MethodIsNotImplemented(__class__,"get_Name")
31+
32+
@property
33+
defIsClosed(self)->bool:
34+
RaiseError.MethodIsNotImplemented(__class__,"get_IsClosed")
35+
36+
defOverwrite(self,text:str)->None:
37+
asserttype(text)==str# noqa: E721
38+
RaiseError.MethodIsNotImplemented(__class__,"Write")
39+
40+
defClose(self):
41+
RaiseError.MethodIsNotImplemented(__class__,"Close")
42+
43+
defGetModificationTS(self)->datetime.datetime:
44+
RaiseError.MethodIsNotImplemented(__class__,"GetModificationTS")
45+
46+
847
# //////////////////////////////////////////////////////////////////////////////
948
# class ConfigurationOsOps
1049

@@ -43,5 +82,16 @@ def Remove(self, a: str) -> str:
4382
asserttype(a)==str# noqa: E721
4483
RaiseError.MethodIsNotImplemented(__class__,"Remove")
4584

85+
defOpenFileToRead(self,filePath:str)->ConfigurationOsFile:
86+
asserttype(filePath)==str# noqa: E721
87+
RaiseError.MethodIsNotImplemented(__class__,"OpenFileToRead")
88+
89+
defOpenFileToWrite(self,filePath:str)->ConfigurationOsFile:
90+
asserttype(filePath)==str# noqa: E721
91+
RaiseError.MethodIsNotImplemented(__class__,"OpenFileToWrite")
92+
93+
defCreateFile(self,filePath:str)->ConfigurationOsFile:
94+
asserttype(filePath)==str# noqa: E721
95+
RaiseError.MethodIsNotImplemented(__class__,"CreateFile")
4696

4797
# //////////////////////////////////////////////////////////////////////////////

‎src/os/local/configuration_os_ops.py‎

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,82 @@
66
from ..abstractimportconfiguration_os_opsasabstract
77

88
importos
9+
importio
10+
importdatetime
11+
12+
# //////////////////////////////////////////////////////////////////////////////
13+
# class ConfigurationOsFile
14+
15+
16+
classConfigurationOsFile(abstract.ConfigurationOsFile):
17+
m_file:io.TextIOWrapper
18+
19+
# --------------------------------------------------------------------
20+
def__init__(self,file:io.TextIOWrapper):
21+
assertisinstance(file,io.TextIOWrapper)
22+
23+
super().__init__()
24+
25+
self.m_file=file
26+
27+
# --------------------------------------------------------------------
28+
def__enter__(self)->ConfigurationOsFile:
29+
assertisinstance(self.m_file,io.TextIOWrapper)
30+
returnself
31+
32+
# --------------------------------------------------------------------
33+
def__exit__(self,exc_type,exc_val,exc_tb):
34+
ifself.m_fileisnotNone:
35+
self.Close()
36+
37+
assertself.m_fileisNone
38+
return
39+
40+
# --------------------------------------------------------------------
41+
@property
42+
defName(self)->str:
43+
assertisinstance(self.m_file,io.TextIOWrapper)
44+
returnself.m_file.name
45+
46+
# --------------------------------------------------------------------
47+
@property
48+
defIsClosed(self)->bool:
49+
returnself.m_fileisNone
50+
51+
# --------------------------------------------------------------------
52+
defReadLine(self)->str:
53+
assertisinstance(self.m_file,io.TextIOWrapper)
54+
returnself.m_file.readline()
55+
56+
# --------------------------------------------------------------------
57+
defOverwrite(self,text:str)->None:
58+
asserttype(text)==str# noqa: E721
59+
assertisinstance(self.m_file,io.TextIOWrapper)
60+
self.m_file.seek(0)
61+
self.m_file.write(text)
62+
self.m_file.truncate()
63+
self.m_file.flush()
64+
65+
# --------------------------------------------------------------------
66+
defClose(self):
67+
assertisinstance(self.m_file,io.TextIOWrapper)
68+
f=self.m_file
69+
self.m_file=None
70+
f.close()
71+
# Returning False (or None) re-raises the exception
72+
returnFalse
73+
74+
# --------------------------------------------------------------------
75+
defGetModificationTS(self)->datetime.datetime:
76+
assertisinstance(self.m_file,io.TextIOWrapper)
77+
78+
fd=self.m_file.fileno()
79+
asserttype(fd)==int# noqa: E721
80+
81+
lastMDate=datetime.datetime.fromtimestamp(os.path.getmtime(fd))
82+
asserttype(lastMDate)==datetime.datetime# noqa: E721
83+
returnlastMDate
84+
985

1086
# //////////////////////////////////////////////////////////////////////////////
1187
# class ConfigurationOsOps
@@ -45,6 +121,21 @@ def Remove(self, a: str) -> str:
45121
asserttype(a)==str# noqa: E721
46122
os.remove(a)
47123

124+
defOpenFileToRead(self,filePath:str)->ConfigurationOsFile:
125+
asserttype(filePath)==str# noqa: E721
126+
f=open(filePath)
127+
returnConfigurationOsFile(f)
128+
129+
defOpenFileToWrite(self,filePath:str)->ConfigurationOsFile:
130+
asserttype(filePath)==str# noqa: E721
131+
f=open(filePath,mode="r+")
132+
returnConfigurationOsFile(f)
133+
134+
defCreateFile(self,filePath:str)->ConfigurationOsFile:
135+
asserttype(filePath)==str# noqa: E721
136+
f=open(filePath,mode="x")
137+
returnConfigurationOsFile(f)
138+
48139

49140
# //////////////////////////////////////////////////////////////////////////////
50141

‎tests/CfgFileReader.py‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# /////////////////////////////////////////////////////////////////////////////
2+
# Postgres Pro. PostgreSQL Configuration Python Library. Tests.
3+
4+
from ..src.os.abstract.configuration_os_opsimportConfigurationFileReader
5+
6+
importio
7+
8+
# //////////////////////////////////////////////////////////////////////////////
9+
# class CfgFileReader
10+
11+
12+
classCfgFileReader(ConfigurationFileReader):
13+
m_file:io.StringIO
14+
15+
# --------------------------------------------------------------------
16+
def__init__(self,text:str):
17+
super().__init__()
18+
19+
self.m_file=io.StringIO(text)
20+
21+
# --------------------------------------------------------------------
22+
defReadLine(self)->str:
23+
asserttype(self.m_file)==io.StringIO
24+
returnself.m_file.readline()
25+
26+
27+
# //////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp