##// END OF EJS Templates
py3: trivial renaming of unicode to str
py3: trivial renaming of unicode to str

File last commit:

r8068:22b40db4 default
r8081:620c13a3 default
Show More
base.py
166 lines | 4.7 KiB | text/x-python | PythonLexer
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 # -*- coding: utf-8 -*-
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
kallithea.bin.base
~~~~~~~~~~~~~~~~~~
Base utils for shell scripts
Bradley M. Kuhn
RhodeCode GmbH is not the sole author of this work
r4211 This file was forked by the Kallithea project in July 2014.
Original author and date, and relevant copyright and licensing information is below:
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 :created_on: May 09, 2013
:author: marcink
Bradley M. Kuhn
RhodeCode GmbH is not the sole author of this work
r4211 :copyright: (c) 2013 RhodeCode GmbH, and others.
Bradley M. Kuhn
Correct licensing information in individual files....
r4208 :license: GPLv3, see LICENSE.md for more details.
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 """
import os
Mads Kiilerich
scripts: initial run of import cleanup using isort
r7718 import pprint
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 import random
Mads Kiilerich
scripts: initial run of import cleanup using isort
r7718 import sys
Mads Kiilerich
py3: migrate from urllib2 to urllib...
r8068 import urllib.request
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187
Mads Kiilerich
lib: clean up ext_json and how it is used - avoid monkey patching...
r7987 from kallithea.lib import ext_json
from kallithea.lib.utils2 import ascii_bytes
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187
Mads Kiilerich
scripts: initial run of import cleanup using isort
r7718
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 CONFIG_NAME = '.config/kallithea'
FORMAT_PRETTY = 'pretty'
FORMAT_JSON = 'json'
def api_call(apikey, apihost, method=None, **kw):
"""
Bradley M. Kuhn
General renaming to Kallithea
r4212 Api_call wrapper for Kallithea.
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187
:param apikey:
:param apihost:
:param format: formatting, pretty means prints and pprint of json
json returns unparsed json
:param method:
:returns: json response from server
"""
def _build_data(random_id):
"""
Builds API data with given random ID
:param random_id:
"""
return {
"id": random_id,
"api_key": apikey,
"method": method,
"args": kw
}
if not method:
raise Exception('please specify method name !')
apihost = apihost.rstrip('/')
id_ = random.randrange(1, 9999)
Mads Kiilerich
py3: migrate from urllib2 to urllib...
r8068 req = urllib.request.Request('%s/_admin/api' % apihost,
Mads Kiilerich
lib: clean up ext_json and how it is used - avoid monkey patching...
r7987 data=ascii_bytes(ext_json.dumps(_build_data(id_))),
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 headers={'content-type': 'text/plain'})
Mads Kiilerich
py3: migrate from urllib2 to urllib...
r8068 ret = urllib.request.urlopen(req)
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 raw_json = ret.read()
Mads Kiilerich
lib: clean up ext_json and how it is used - avoid monkey patching...
r7987 json_data = ext_json.loads(raw_json)
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 id_ret = json_data['id']
if id_ret == id_:
return json_data
else:
_formatted_json = pprint.pformat(json_data)
raise Exception('something went wrong. '
'ID mismatch got %s, expected %s | %s' % (
id_ret, id_, _formatted_json))
class RcConf(object):
"""
Bradley M. Kuhn
General renaming to Kallithea
r4212 Kallithea config for API
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187
conf = RcConf()
conf['key']
"""
def __init__(self, config_location=None, autoload=True, autocreate=False,
config=None):
HOME = os.getenv('HOME', os.getenv('USERPROFILE')) or ''
HOME_CONF = os.path.abspath(os.path.join(HOME, CONFIG_NAME))
self._conf_name = HOME_CONF if not config_location else config_location
self._conf = {}
if autocreate:
self.make_config(config)
if autoload:
self._conf = self.load_config()
def __getitem__(self, key):
return self._conf[key]
Mads Kiilerich
py3: support __bool__...
r8055 def __bool__(self):
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 if self._conf:
return True
return False
domruf
bin: fix __eq__ of bin/base.py RcConf...
r6587 def __eq__(self, other):
return self._conf.__eq__(other)
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187
def __repr__(self):
return 'RcConf<%s>' % self._conf.__repr__()
def make_config(self, config):
"""
Saves given config as a JSON dump in the _conf_name location
:param config:
"""
update = False
if os.path.exists(self._conf_name):
update = True
with open(self._conf_name, 'wb') as f:
Mads Kiilerich
lib: clean up ext_json and how it is used - avoid monkey patching...
r7987 ext_json.dump(config, f, indent=4)
Mads Kiilerich
kallithea-api: add trailing newline when writing config file
r4885 f.write('\n')
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187
if update:
sys.stdout.write('Updated config in %s\n' % self._conf_name)
else:
sys.stdout.write('Created new config in %s\n' % self._conf_name)
def update_config(self, new_config):
"""
Reads the JSON config updates it's values with new_config and
saves it back as JSON dump
:param new_config:
"""
config = {}
try:
with open(self._conf_name, 'rb') as conf:
Mads Kiilerich
lib: clean up ext_json and how it is used - avoid monkey patching...
r7987 config = ext_json.load(conf)
Mads Kiilerich
cleanup: consistently use 'except ... as ...:'...
r5374 except IOError as e:
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 sys.stderr.write(str(e) + '\n')
config.update(new_config)
self.make_config(config)
def load_config(self):
"""
Loads config from file and returns loaded JSON object
"""
try:
with open(self._conf_name, 'rb') as conf:
Mads Kiilerich
lib: clean up ext_json and how it is used - avoid monkey patching...
r7987 return ext_json.load(conf)
Mads Kiilerich
cleanup: consistently use 'except ... as ...:'...
r5374 except IOError as e:
Bradley M. Kuhn
Second step in two-part process to rename directories....
r4187 #sys.stderr.write(str(e) + '\n')
pass