33from __future__ import division
44from __future__ import print_function
55
6- import functools
76import io
87import os
98import port_for
10- import six
119import subprocess
1210import sys
1311
1614from .config import testgres_config
1715from .exceptions import ExecUtilException
1816
17+
1918# rows returned by PG_CONFIG
2019_pg_config_data = {}
2120
@@ -42,56 +41,6 @@ def release_port(port):
4241 bound_ports .remove (port )
4342
4443
45- def default_dbname ():
46- """
47- Return default DB name.
48- """
49-
50- return 'postgres'
51-
52-
53- def default_username ():
54- """
55- Return default username (current user).
56- """
57-
58- import getpass
59- return getpass .getuser ()
60-
61-
62- def generate_app_name ():
63- """
64- Generate a new application name for node.
65- """
66-
67- import uuid
68- return 'testgres-{}' .format (str (uuid .uuid4 ()))
69-
70-
71- def generate_system_id ():
72- """
73- Generate a new 64-bit unique system identifier for node.
74- """
75-
76- import datetime
77- import struct
78-
79- date1 = datetime .datetime .utcfromtimestamp (0 )
80- date2 = datetime .datetime .utcnow ()
81-
82- secs = int ((date2 - date1 ).total_seconds ())
83- usecs = date2 .microsecond
84-
85- # see pg_resetwal.c : GuessControlValues()
86- system_id = 0
87- system_id |= (secs << 32 )
88- system_id |= (usecs << 12 )
89- system_id |= (os .getpid () & 0xFFF )
90-
91- # pack ULL in native byte order
92- return struct .pack ('=Q' , system_id )
93-
94-
9544def execute_utility (args , logfile = None ):
9645 """
9746 Execute utility (pg_ctl, pg_dump etc).
@@ -268,77 +217,5 @@ def file_tail(f, num_lines):
268217 buffers = int (buffers * max (2 , num_lines / max (cur_lines , 1 )))
269218
270219
271- def positional_args_hack (* special_cases ):
272- """
273- Convert positional args described by
274- 'special_cases' into named args.
275-
276- Example:
277- @positional_args_hack(['abc'], ['def', 'abc'])
278- def some_api_func(...)
279-
280- This is useful for compatibility.
281- """
282-
283- cases = dict ()
284-
285- for case in special_cases :
286- k = len (case )
287- assert k not in six .iterkeys (cases ), 'len must be unique'
288- cases [k ] = case
289-
290- def decorator (function ):
291- @functools .wraps (function )
292- def wrapper (* args , ** kwargs ):
293- k = len (args )
294-
295- if k in six .iterkeys (cases ):
296- case = cases [k ]
297-
298- for i in range (0 , k ):
299- arg_name = case [i ]
300- arg_val = args [i ]
301-
302- # transform into named
303- kwargs [arg_name ] = arg_val
304-
305- # get rid of them
306- args = []
307-
308- return function (* args , ** kwargs )
309-
310- return wrapper
311-
312- return decorator
313-
314-
315- def method_decorator (decorator ):
316- """
317- Convert a function decorator into a method decorator.
318- """
319-
320- def _dec (func ):
321- def _wrapper (self , * args , ** kwargs ):
322- @decorator
323- def bound_func (* args2 , ** kwargs2 ):
324- return func .__get__ (self , type (self ))(* args2 , ** kwargs2 )
325-
326- # 'bound_func' is a closure and can see 'self'
327- return bound_func (* args , ** kwargs )
328-
329- # preserve docs
330- functools .update_wrapper (_wrapper , func )
331-
332- return _wrapper
333-
334- # preserve docs
335- functools .update_wrapper (_dec , decorator )
336-
337- # change name for easier debugging
338- _dec .__name__ = 'method_decorator({})' .format (decorator .__name__ )
339-
340- return _dec
341-
342-
343220def eprint (* args , ** kwargs ):
344221 print (* args , file = sys .stderr , ** kwargs )
0 commit comments