View | Details | Raw Unified | Return to bug 51996 | Differences between
and this patch

Collapse All | Expand All

(-)univention-appcenter-control.org (-20 / +17 lines)
 Lines 1-4    Link Here 
1
#!/usr/bin/python2.7
1
#!/usr/bin/python3
2
# -*- coding: utf-8 -*-
2
# -*- coding: utf-8 -*-
3
#
3
#
4
# Univention App Center
4
# Univention App Center
 Lines 33-53    Link Here 
33
#
33
#
34
34
35
import json
35
import json
36
import re
36
import logging
37
import os.path
37
import os.path
38
from subprocess import Popen, PIPE
38
import re
39
from argparse import SUPPRESS, Action
39
import sys
40
from tempfile import NamedTemporaryFile
40
from argparse import SUPPRESS, Action, ArgumentParser, Namespace
41
from contextlib import contextmanager
41
from distutils.version import LooseVersion
42
from distutils.version import LooseVersion
42
from argparse import ArgumentParser, Namespace
43
import logging
44
from getpass import getpass
43
from getpass import getpass
45
from contextlib import contextmanager
44
from subprocess import PIPE, Popen
46
import sys
45
from tempfile import NamedTemporaryFile
47
48
49
reload(sys)
50
sys.setdefaultencoding('utf8')
51
46
52
47
53
PROGRAM = sys.argv[0]
48
PROGRAM = sys.argv[0]
 Lines 96-101    Link Here 
96
			handler.setFormatter(formatter)
91
			handler.setFormatter(formatter)
97
		handler.addFilter(RangeFilter(min_level=logging.WARN))
92
		handler.addFilter(RangeFilter(min_level=logging.WARN))
98
		logger.addHandler(handler)
93
		logger.addHandler(handler)
94
95
99
log_to_stream._already_set_up = False
96
log_to_stream._already_set_up = False
100
97
101
98
 Lines 121-128    Link Here 
121
		return new_cls
118
		return new_cls
122
119
123
120
124
class UniventionAppAction(object):
121
class UniventionAppAction(object, metaclass=UniventionAppActionMeta):
125
	__metaclass__ = UniventionAppActionMeta
126
122
127
	parent_logger = get_base_logger().getChild('actions')
123
	parent_logger = get_base_logger().getChild('actions')
128
124
 Lines 186-192    Link Here 
186
				default = getattr(_namespace, action.dest)
182
				default = getattr(_namespace, action.dest)
187
			args[action.dest] = default
183
			args[action.dest] = default
188
		args.update(kwargs)
184
		args.update(kwargs)
189
		for key, value in args.iteritems():
185
		for key, value in args.items():
190
			setattr(namespace, key, value)
186
			setattr(namespace, key, value)
191
		return namespace
187
		return namespace
192
188
 Lines 266-272    Link Here 
266
			return args.username
262
			return args.username
267
		if not args.noninteractive:
263
		if not args.noninteractive:
268
			try:
264
			try:
269
				username = raw_input('Username: ')
265
				username = input('Username: ')
270
				if not username:
266
				if not username:
271
					raise EOFError()
267
					raise EOFError()
272
			except (EOFError, KeyboardInterrupt):
268
			except (EOFError, KeyboardInterrupt):
 Lines 302-308    Link Here 
302
		if not password:
298
		if not password:
303
			yield None
299
			yield None
304
		else:
300
		else:
305
			with NamedTemporaryFile('w+b') as password_file:
301
			with NamedTemporaryFile('w+') as password_file:
306
				password_file.write(password)
302
				password_file.write(password)
307
				password_file.flush()
303
				password_file.flush()
308
				yield password_file.name
304
				yield password_file.name
 Lines 356-362    Link Here 
356
			server = 'https://%s' % server
352
			server = 'https://%s' % server
357
		uri = '%s/univention/%s' % (server, path)
353
		uri = '%s/univention/%s' % (server, path)
358
		args = []
354
		args = []
359
		for key, value in kwargs.iteritems():
355
		for key, value in kwargs.items():
360
			if value is None:
356
			if value is None:
361
				continue
357
				continue
362
			if not isinstance(value, (tuple, list)):
358
			if not isinstance(value, (tuple, list)):
 Lines 385-390    Link Here 
385
		args = ['curl', '--cookie', self._cookiejar.name, '--cookie-jar', self._cookiejar.name, '-H', 'X-Requested-With: XmlHttpRequest', '-H', 'Accept: application/json; q=1'] + args + [uri]
381
		args = ['curl', '--cookie', self._cookiejar.name, '--cookie-jar', self._cookiejar.name, '-H', 'X-Requested-With: XmlHttpRequest', '-H', 'Accept: application/json; q=1'] + args + [uri]
386
		process = Popen(args, stdout=PIPE, stderr=PIPE)
382
		process = Popen(args, stdout=PIPE, stderr=PIPE)
387
		out, err = process.communicate()
383
		out, err = process.communicate()
384
		out, err = out.decode('UTF-8'), err.decode('UTF-8')
388
		try:
385
		try:
389
			return json.loads(out)
386
			return json.loads(out)
390
		except ValueError:
387
		except ValueError:
 Lines 471-477    Link Here 
471
				ret.extend(app['versions'])
468
				ret.extend(app['versions'])
472
		return ret
469
		return ret
473
470
474
475
	def _find_app_versions(self, args):
471
	def _find_app_versions(self, args):
476
		ucs_version = self._get_ucs_version(args.app)
472
		ucs_version = self._get_ucs_version(args.app)
477
		versions = self._find_all_app_versions(args)
473
		versions = self._find_all_app_versions(args)
 Lines 708-712    Link Here 
708
		ret = 0
704
		ret = 0
709
	sys.exit(ret)
705
	sys.exit(ret)
710
706
707
711
if __name__ == '__main__':
708
if __name__ == '__main__':
712
	main()
709
	main()

Return to bug 51996