Skip to content
This repository was archived by the owner on Apr 21, 2023. It is now read-only.

Commit 260ae70

Browse files
committed
[PythonKit] Reorganized code
1 parent 9ffc38a commit 260ae70

File tree

1 file changed

+73
-73
lines changed

1 file changed

+73
-73
lines changed

PythonKit/PythonLibrary.swift

Lines changed: 73 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -71,79 +71,6 @@ public struct PythonLibrary {
7171
}
7272
}
7373

74-
// Methods of `PythonLibrary` required to set a given Python version.
75-
extension PythonLibrary {
76-
private static func enforceNonLoadedPythonLibrary(function: String = #function) {
77-
precondition(!self.isPythonLibraryLoaded, """
78-
Error: \(function) should not be called after any Python library \
79-
has already been loaded.
80-
""")
81-
}
82-
83-
public static func useVersion(_ major: Int, _ minor: Int? = nil) {
84-
self.enforceNonLoadedPythonLibrary()
85-
let version = PythonVersion(major: major, minor: minor)
86-
PythonLibrary.Environment.version.set(version.versionString)
87-
}
88-
89-
public static func useLibrary(at path: String) {
90-
self.enforceNonLoadedPythonLibrary()
91-
PythonLibrary.Environment.library.set(path)
92-
}
93-
}
94-
95-
// `PythonVersion` struct that defines a given Python version.
96-
extension PythonLibrary {
97-
private struct PythonVersion {
98-
let major: Int
99-
let minor: Int?
100-
101-
static let versionSeparator: Character = "."
102-
103-
init(major: Int, minor: Int?) {
104-
self.major = major
105-
self.minor = minor
106-
}
107-
108-
var versionString: String {
109-
var versionString = String(major)
110-
if let minor = minor {
111-
versionString += "\(PythonVersion.versionSeparator)\(minor)"
112-
}
113-
return versionString
114-
}
115-
}
116-
}
117-
118-
// `PythonLibrary.Environment` enum used to read and set environment variables.
119-
extension PythonLibrary {
120-
private enum Environment: String {
121-
private static let keyPrefix = "PYTHON"
122-
private static let keySeparator = "_"
123-
124-
case library = "LIBRARY"
125-
case version = "VERSION"
126-
case loaderLogging = "LOADER_LOGGING"
127-
128-
var key: String {
129-
return Environment.keyPrefix + Environment.keySeparator + rawValue
130-
}
131-
132-
var value: String? {
133-
guard let value = getenv(key) else { return nil }
134-
return String(cString: value)
135-
}
136-
137-
func set(_ value: String) {
138-
#if canImport(Darwin) || canImport(Glibc)
139-
setenv(key, value, 1)
140-
#elseif os(Windows)
141-
_putenv_s(key, value)
142-
#endif
143-
}
144-
}
145-
}
146-
14774
// Methods of `PythonLibrary` required to load the Python library.
14875
extension PythonLibrary {
14976
private static let supportedMajorVersions: [Int] = [3, 2]
@@ -267,6 +194,79 @@ extension PythonLibrary {
267194
}
268195
}
269196

197+
// Methods of `PythonLibrary` required to set a given Python version.
198+
extension PythonLibrary {
199+
private static func enforceNonLoadedPythonLibrary(function: String = #function) {
200+
precondition(!self.isPythonLibraryLoaded, """
201+
Error: \(function) should not be called after any Python library \
202+
has already been loaded.
203+
""")
204+
}
205+
206+
public static func useVersion(_ major: Int, _ minor: Int? = nil) {
207+
self.enforceNonLoadedPythonLibrary()
208+
let version = PythonVersion(major: major, minor: minor)
209+
PythonLibrary.Environment.version.set(version.versionString)
210+
}
211+
212+
public static func useLibrary(at path: String) {
213+
self.enforceNonLoadedPythonLibrary()
214+
PythonLibrary.Environment.library.set(path)
215+
}
216+
}
217+
218+
// `PythonVersion` struct that defines a given Python version.
219+
extension PythonLibrary {
220+
private struct PythonVersion {
221+
let major: Int
222+
let minor: Int?
223+
224+
static let versionSeparator: Character = "."
225+
226+
init(major: Int, minor: Int?) {
227+
self.major = major
228+
self.minor = minor
229+
}
230+
231+
var versionString: String {
232+
var versionString = String(major)
233+
if let minor = minor {
234+
versionString += "\(PythonVersion.versionSeparator)\(minor)"
235+
}
236+
return versionString
237+
}
238+
}
239+
}
240+
241+
// `PythonLibrary.Environment` enum used to read and set environment variables.
242+
extension PythonLibrary {
243+
private enum Environment: String {
244+
private static let keyPrefix = "PYTHON"
245+
private static let keySeparator = "_"
246+
247+
case library = "LIBRARY"
248+
case version = "VERSION"
249+
case loaderLogging = "LOADER_LOGGING"
250+
251+
var key: String {
252+
return Environment.keyPrefix + Environment.keySeparator + rawValue
253+
}
254+
255+
var value: String? {
256+
guard let value = getenv(key) else { return nil }
257+
return String(cString: value)
258+
}
259+
260+
func set(_ value: String) {
261+
#if canImport(Darwin) || canImport(Glibc)
262+
setenv(key, value, 1)
263+
#elseif os(Windows)
264+
_putenv_s(key, value)
265+
#endif
266+
}
267+
}
268+
}
269+
270270
// Methods of `PythonLibrary` used for logging messages.
271271
extension PythonLibrary {
272272
private static func log(_ message: String) {

0 commit comments

Comments
 (0)