Skip to content

Commit 53295fa

Browse files
committed
only import lib when required
1 parent 0170471 commit 53295fa

6 files changed

Lines changed: 83 additions & 79 deletions

File tree

run_tests.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/sh
2+
3+
export PYTHONPATH=.
4+
sudo nosetests test/test_partner.py
5+
sudo nosetests test/test_server.py
6+
sudo PYTHONPATH=. snap7/bin/snap7-server.py &
7+
nosetests test/test_client.py
8+

snap7/bin/snap7-server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def mainloop():
2020
while True:
2121
event = server.pick_event()
2222
if event:
23-
logger.info(snap7.server.event_text(event))
23+
logger.info(server.event_text(event))
2424
else:
2525
break
2626
time.sleep(1)

snap7/client.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from snap7.common import check_error, load_library
1111

1212
logger = logging.getLogger(__name__)
13-
clib = load_library()
1413

1514

1615
def error_wrap(func):
@@ -44,24 +43,25 @@ def __init__(self):
4443
4544
:returns: A Snap7Client object
4645
"""
46+
self.library = load_library()
4747
logger.info("creating snap7 client")
48-
self.pointer = S7Object(clib.Cli_Create())
48+
self.pointer = S7Object(self.library.Cli_Create())
4949
# local buffer used by test for now..
5050

5151
def destroy(self):
5252
"""
5353
destroy a client.
5454
"""
5555
logger.info("destroying snap7 client")
56-
return clib.Cli_Destroy(byref(self.pointer))
56+
return self.library.Cli_Destroy(byref(self.pointer))
5757

5858
@error_wrap
5959
def disconnect(self):
6060
"""
6161
disconnect a client.
6262
"""
6363
logger.info("disconnecting snap7 client")
64-
return clib.Cli_Disconnect(self.pointer)
64+
return self.library.Cli_Disconnect(self.pointer)
6565

6666
@error_wrap
6767
def connect(self, address, rack, slot):
@@ -73,7 +73,7 @@ def connect(self, address, rack, slot):
7373
:param slot: slot on server.
7474
"""
7575
logger.info("connecting to %s rack %s slot %s" % (address, rack, slot))
76-
return clib.Cli_ConnectTo(self.pointer, c_char_p(address),
76+
return self.library.Cli_ConnectTo(self.pointer, c_char_p(address),
7777
c_int(rack), c_int(slot))
7878

7979
def db_read(self, db_number, start, size):
@@ -86,7 +86,7 @@ def db_read(self, db_number, start, size):
8686

8787
type_ = snap7.types.wordlen_to_ctypes[snap7.types.S7WLByte]
8888
data = (type_ * size)()
89-
result = (clib.Cli_DBRead(self.pointer, db_number, start, size,
89+
result = (self.library.Cli_DBRead(self.pointer, db_number, start, size,
9090
byref(data)))
9191
check_error(result, context="client")
9292
return bytearray(data)
@@ -103,7 +103,7 @@ def db_write(self, db_number, start, size, data):
103103
logger.debug("db_write db_number:%s start:%s size:%s data:%s" %
104104
(db_number, start, size, data))
105105

106-
return clib.Cli_DBWrite(self.pointer, db_number, start, size,
106+
return self.library.Cli_DBWrite(self.pointer, db_number, start, size,
107107
byref(_buffer))
108108

109109
def db_full_upload(self, _type, block_num):
@@ -116,7 +116,7 @@ def db_full_upload(self, _type, block_num):
116116
size = c_int(sizeof(_buffer))
117117
block_type = snap7.types.block_types[_type]
118118

119-
result = clib.Cli_FullUpload(self.pointer, block_type, block_num,
119+
result = self.library.Cli_FullUpload(self.pointer, block_type, block_num,
120120
byref(_buffer), byref(size))
121121

122122
check_error(result, context="client")
@@ -136,7 +136,7 @@ def db_upload(self, block_num):
136136
_buffer = buffer_type()
137137
size = c_int(sizeof(_buffer))
138138

139-
result = clib.Cli_Upload(self.pointer, block_type, block_num,
139+
result = self.library.Cli_Upload(self.pointer, block_type, block_num,
140140
byref(_buffer), byref(size))
141141

142142
check_error(result, context="client")
@@ -153,7 +153,7 @@ def download(self, db_number, data, size):
153153

154154
_buffer = bytearray_to_buffer(data)
155155

156-
result = clib.Cli_Download(self.pointer, db_number,
156+
result = self.library.Cli_Download(self.pointer, db_number,
157157
byref(_buffer), size)
158158
return result
159159

@@ -162,7 +162,7 @@ def db_get(self, db_number):
162162
"""
163163
logging.debug("db_get db_number: %s" % db_number)
164164
_buffer = buffer_type()
165-
result = clib.Cli_DBGet(self.pointer, db_number, byref(_buffer),
165+
result = self.library.Cli_DBGet(self.pointer, db_number, byref(_buffer),
166166
byref(c_int(buffer_size)))
167167
check_error(result, context="client")
168168
return bytearray(_buffer)
@@ -175,7 +175,7 @@ def read_area(self, area, dbnumber, start, amount):
175175
logging.debug("reading area: %s dbnumber: %s start: %s: amount %s: "
176176
"wordlen: %s" % (area, dbnumber, start, amount, wordlen))
177177
data = (wordlen_to_ctypes[wordlen] * amount)()
178-
result = clib.Cli_ReadArea(self.pointer, area, dbnumber, start, amount,
178+
result = self.library.Cli_ReadArea(self.pointer, area, dbnumber, start, amount,
179179
wordlen, byref(data))
180180
check_error(result, context="client")
181181
return data
@@ -193,7 +193,7 @@ def write_area(self, area, dbnumber, start, amount, data):
193193

194194
_buffer = bytearray_to_buffer(data)
195195

196-
return clib.Cli_WriteArea(self.pointer, area, dbnumber, start, amount,
196+
return self.library.Cli_WriteArea(self.pointer, area, dbnumber, start, amount,
197197
wordlen, byref(_buffer))
198198

199199
def list_blocks(self):
@@ -203,7 +203,7 @@ def list_blocks(self):
203203
"""
204204
logging.debug("listing blocks")
205205
blocksList = BlocksList()
206-
result = clib.Cli_ListBlocks(self.pointer, byref(blocksList))
206+
result = self.library.Cli_ListBlocks(self.pointer, byref(blocksList))
207207
check_error(result, context="client")
208208
logging.debug("blocks: %s" % blocksList)
209209
return blocksList
@@ -214,7 +214,7 @@ def list_blocks_of_type(self, blocktype, size):
214214
(blocktype, size))
215215
data = (c_int * 10)()
216216
count = c_int(size)
217-
result = clib.Cli_ListBlocksOfType(self.pointer, blocktype,
217+
result = self.library.Cli_ListBlocksOfType(self.pointer, blocktype,
218218
byref(data),
219219
byref(count))
220220

@@ -226,12 +226,12 @@ def list_blocks_of_type(self, blocktype, size):
226226
def set_session_password(self, password):
227227
"""Send the password to the PLC to meet its security level."""
228228
assert len(password) <= 8, 'maximum password length is 8'
229-
return clib.Cli_SetSessionPassword(self.pointer, c_char_p(password))
229+
return self.library.Cli_SetSessionPassword(self.pointer, c_char_p(password))
230230

231231
@error_wrap
232232
def clear_session_password(self):
233233
"""Clears the password set for the current session (logout)."""
234-
return clib.Cli_ClearSessionPassword(self.pointer)
234+
return self.library.Cli_ClearSessionPassword(self.pointer)
235235

236236

237237
# TODO: implement

snap7/partner.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from snap7.types import S7Object
1515

1616
logger = logging.getLogger(__name__)
17-
clib = load_library()
1817

1918

2019
def error_wrap(func):
@@ -30,6 +29,7 @@ class Partner(object):
3029
A snap7 partner.
3130
"""
3231
def __init__(self, active=False):
32+
self.library = load_library()
3333
self.pointer = self.create(active)
3434

3535
def as_b_send(self):
@@ -38,36 +38,36 @@ def as_b_send(self):
3838
it terminates immediately, a completion method is needed to know when
3939
the transfer is complete.
4040
"""
41-
return clib.Par_AsBSend(self.pointer)
41+
return self.library.Par_AsBSend(self.pointer)
4242

4343
def b_recv(self):
4444
"""
4545
Receives a data packet from the partner. This function is
4646
synchronous, it waits until a packet is received or the timeout
4747
supplied expires.
4848
"""
49-
return clib.Par_BRecv(self.pointer)
49+
return self.library.Par_BRecv(self.pointer)
5050

5151
def b_send(self):
5252
"""
5353
Sends a data packet to the partner. This function is synchronous, i.e.
5454
it terminates when the transfer job (send+ack) is complete.
5555
"""
56-
return clib.Par_BSend(self.pointer)
56+
return self.library.Par_BSend(self.pointer)
5757

5858
def check_as_b_recv_completion(self):
5959
"""
6060
Checks if a packed received was received.
6161
"""
62-
return clib.Par_CheckAsBRecvCompletion(self.pointer)
62+
return self.library.Par_CheckAsBRecvCompletion(self.pointer)
6363

6464
def check_as_b_send_completion(self):
6565
"""
6666
Checks if the current asynchronous send job was completed and terminates
6767
immediately.
6868
"""
6969
op_result = ctypes.c_int32()
70-
result = clib.Par_CheckAsBSendCompletion(self.pointer,
70+
result = self.library.Par_CheckAsBSendCompletion(self.pointer,
7171
ctypes.byref(op_result))
7272
return_values = {
7373
0: "job complete",
@@ -84,30 +84,30 @@ def create(self, active=False):
8484
:param active: 0
8585
:returns: a pointer to the partner object
8686
"""
87-
return S7Object(clib.Par_Create(int(active)))
87+
return S7Object(self.library.Par_Create(int(active)))
8888

8989
def destroy(self):
9090
"""
9191
Destroy a Partner of given handle.
9292
Before destruction the Partner is stopped, all clients disconnected and
9393
all shared memory blocks released.
9494
"""
95-
return clib.Par_Destroy(ctypes.byref(self.pointer))
95+
return self.library.Par_Destroy(ctypes.byref(self.pointer))
9696

9797
def get_last_error(self):
9898
"""
9999
Returns the last job result.
100100
"""
101101
error = ctypes.c_int32()
102-
result = clib.Par_GetLastError(self.pointer, ctypes.byref(error))
102+
result = self.library.Par_GetLastError(self.pointer, ctypes.byref(error))
103103
check_error(result, "partner")
104104
return error
105105

106106
def get_param(self):
107107
"""
108108
Reads an internal Partner object parameter.
109109
"""
110-
return clib.Par_GetParam(self.pointer)
110+
return self.library.Par_GetParam(self.pointer)
111111

112112
def get_stats(self):
113113
"""
@@ -119,7 +119,7 @@ def get_stats(self):
119119
recv = ctypes.c_uint32()
120120
send_errors = ctypes.c_uint32()
121121
recv_errors = ctypes.c_uint32()
122-
result = clib.Par_GetStats(self.pointer, ctypes.byref(sent),
122+
result = self.library.Par_GetStats(self.pointer, ctypes.byref(sent),
123123
ctypes.byref(recv),
124124
ctypes.byref(send_errors),
125125
ctypes.byref(recv_errors))
@@ -131,7 +131,7 @@ def get_status(self):
131131
Returns the Partner status.
132132
"""
133133
status = ctypes.c_int32()
134-
result = clib.Par_GetStatus(self.pointer, ctypes.byref(status))
134+
result = self.library.Par_GetStatus(self.pointer, ctypes.byref(status))
135135
check_error(result, "partner")
136136
return status
137137

@@ -141,7 +141,7 @@ def get_times(self):
141141
"""
142142
send_time = ctypes.c_int32()
143143
recv_time = ctypes.c_int32()
144-
result = clib.Par_GetTimes(self.pointer, ctypes.byref(send_time),
144+
result = self.library.Par_GetTimes(self.pointer, ctypes.byref(send_time),
145145
ctypes.byref(recv_time))
146146
check_error(result, "partner")
147147
return send_time, recv_time
@@ -150,29 +150,29 @@ def set_param(self):
150150
"""
151151
Sets an internal Partner object parameter.
152152
"""
153-
return clib.Par_SetParam(self.pointer)
153+
return self.library.Par_SetParam(self.pointer)
154154

155155
def set_recv_callback(self):
156156
"""
157157
Sets the user callback that the Partner object has to call when a data
158158
packet is incoming.
159159
"""
160-
return clib.Par_SetRecvCallback(self.pointer)
160+
return self.library.Par_SetRecvCallback(self.pointer)
161161

162162
def set_send_callback(self):
163163
"""
164164
Sets the user callback that the Partner object has to call when the
165165
asynchronous data sent is complete.
166166
"""
167-
return clib.Par_SetSendCallback(self.pointer)
167+
return self.library.Par_SetSendCallback(self.pointer)
168168

169169
@error_wrap
170170
def start(self):
171171
"""
172172
Starts the Partner and binds it to the specified IP address and the
173173
IsoTCP port.
174174
"""
175-
return clib.Par_Start(self.pointer)
175+
return self.library.Par_Start(self.pointer)
176176

177177
@error_wrap
178178
def start_to(self, ip):
@@ -182,17 +182,17 @@ def start_to(self, ip):
182182
"""
183183
assert re.match(ipv4, ip), '%s is invalid ipv4' % ip
184184
logger.info("starting server to %s:102" % ip)
185-
return clib.Par_StartTo(self.pointer, ip)
185+
return self.library.Par_StartTo(self.pointer, ip)
186186

187187
def stop(self):
188188
"""
189189
Stops the Partner, disconnects gracefully the remote partner.
190190
"""
191-
return clib.Par_Stop(self.pointer)
191+
return self.library.Par_Stop(self.pointer)
192192

193193
def wait_as_b_send_completion(self):
194194
"""
195195
Waits until the current asynchronous send job is done or the timeout
196196
expires.
197197
"""
198-
return clib.Par_WaitAsBSendCompletion(self.pointer)
198+
return self.library.Par_WaitAsBSendCompletion(self.pointer)

0 commit comments

Comments
 (0)