Main Page
Namespaces
Classes
Files
File List
rtctree
path.py
Go to the documentation of this file.
1
# -*- Python -*-
2
# -*- coding: utf-8 -*-
3
4
'''rtctree
5
6
Copyright (C) 2009-2014
7
Geoffrey Biggs
8
RT-Synthesis Research Group
9
Intelligent Systems Research Institute,
10
National Institute of Advanced Industrial Science and Technology (AIST),
11
Japan
12
All rights reserved.
13
Licensed under the Eclipse Public License -v 1.0 (EPL)
14
http://www.opensource.org/licenses/eclipse-1.0.txt
15
16
Functions for parsing paths specifying name servers, directories, components,
17
etc.
18
19
'''
20
21
22
from
rtctree.exceptions
import
BadPathError
23
24
25
##############################################################################
26
## API functions
27
28
def
parse_path
(path):
29
'''Parses an address into directory and port parts.
30
31
The last segment of the address will be checked to see if it matches a port
32
specification (i.e. contains a colon followed by text). This will be
33
returned separately from the directory parts.
34
35
If a leading / is given, that will be returned as the first directory
36
component. All other / characters are removed.
37
38
All leading / characters are condensed into a single leading /.
39
40
Any path components that are . will be removed, as they just point to the
41
previous path component. For example, '/localhost/.' will become
42
'/localhost'. Any path components that are .. will be removed, along with
43
the previous path component. If this renders the path empty, it will be
44
replaced with '/'.
45
46
Examples:
47
48
'localhost:30000/manager/comp0.rtc' ->
49
(['localhost:30000', 'manager', 'comp0.rtc'], None)
50
'localhost/manager/comp0.rtc:in' ->
51
(['localhost', 'manager', 'comp0.rtc'], 'in')
52
'/localhost/manager/comp0.rtc' ->
53
(['/', 'localhost', 'manager', 'comp0.rtc'], None)
54
'/localhost/manager/comp0.rtc:in' ->
55
(['/', 'localhost', 'manager', 'comp0.rtc'], 'in')
56
'manager/comp0.rtc' ->
57
(['manager', 'comp0.rtc'], None)
58
'comp0.rtc' ->
59
(['comp0.rtc'], None)
60
61
'''
62
bits = path.lstrip(
'/'
).split(
'/'
)
63
if
not
bits:
64
raise
BadPathError
(path)
65
66
if
bits[-1]:
67
bits[-1], port =
get_port
(bits[-1])
68
else
:
69
port =
None
70
if
path[0] ==
'/'
:
71
bits = [
'/'
] + bits
72
condensed_bits = []
73
for
bit
in
bits:
74
if
bit ==
'.'
:
75
continue
76
if
bit ==
'..'
:
77
condensed_bits = condensed_bits[:-1]
78
continue
79
condensed_bits.append(bit)
80
if
not
condensed_bits:
81
condensed_bits = [
'/'
]
82
return
condensed_bits, port
83
84
85
def
get_port
(path):
86
split_path = path.split(
':'
)
87
if
len(split_path) == 1:
88
return
split_path[0],
None
89
elif
len(split_path) == 2:
90
return
split_path[0], split_path[1]
91
else
:
92
raise
BadPathError
(path)
93
94
95
def
format_path
(path):
96
'''Formats a path as a string, placing / between each component.
97
98
@param path A path in rtctree format, as a tuple with the port name as the
99
second component.
100
101
'''
102
if
path[1]:
103
port =
':'
+ path[1]
104
else
:
105
port =
''
106
if
type(path[0])
is
str:
107
# Don't add slashes if the path is singular
108
return
path[0] + port
109
if
path[0][0] ==
'/'
:
110
starter =
'/'
111
path = path[0][1:]
112
else
:
113
starter =
''
114
path = path[0]
115
return
starter +
'/'
.join(path) + port
116
117
118
# vim: tw=79
119
rtctree.path.get_port
def get_port(path)
Definition:
path.py:85
rtctree.path.parse_path
def parse_path(path)
API functions.
Definition:
path.py:28
rtctree.exceptions
Definition:
exceptions.py:1
rtctree.exceptions.BadPathError
Definition:
exceptions.py:158
rtctree.path.format_path
def format_path(path)
Definition:
path.py:95
rtctree
Author(s): Geoffrey Biggs
autogenerated on Fri Jun 7 2019 21:56:24