[badges-backend] remove hotpatchadding fasjson support to fedbadges
this removes the hotpatch that adds fasjson support to fedbadges. this code is now in python-fedbadges 1.0.3 now Signed-off-by: Ryan Lerch <rlerch@redhat.com>
This commit is contained in:
parent
c0c437e0c6
commit
a5cf3c4728
2 changed files with 0 additions and 164 deletions
|
@ -1,154 +0,0 @@
|
|||
""" Utilities for fedbadges that don't quite fit anywhere else. """
|
||||
|
||||
import types
|
||||
|
||||
import logging
|
||||
log = logging.getLogger("moksha.hub")
|
||||
|
||||
import fedmsg
|
||||
import fedora.client
|
||||
import requests
|
||||
|
||||
# These are here just so they're available in globals()
|
||||
# for compiling lambda expressions
|
||||
import json
|
||||
import re
|
||||
import fedmsg.config
|
||||
import fedmsg.encoding
|
||||
import fedmsg.meta
|
||||
|
||||
# Imports for fasjson support
|
||||
import os
|
||||
import requests
|
||||
import requests.exceptions
|
||||
from gssapi import Credentials, exceptions
|
||||
from requests_gssapi import HTTPSPNEGOAuth
|
||||
|
||||
|
||||
def construct_substitutions(msg):
|
||||
""" Convert a fedmsg message into a dict of substitutions. """
|
||||
subs = {}
|
||||
for key1 in msg:
|
||||
if isinstance(msg[key1], dict):
|
||||
subs.update(dict([
|
||||
('.'.join([key1, key2]), val2)
|
||||
for key2, val2 in construct_substitutions(msg[key1]).items()
|
||||
]))
|
||||
subs[key1] = msg[key1]
|
||||
elif isinstance(msg[key1], basestring):
|
||||
subs[key1] = msg[key1].lower()
|
||||
else:
|
||||
subs[key1] = msg[key1]
|
||||
return subs
|
||||
|
||||
|
||||
def format_args(obj, subs):
|
||||
""" Recursively apply a substitutions dict to a given criteria subtree """
|
||||
|
||||
if isinstance(obj, dict):
|
||||
for key in obj:
|
||||
obj[key] = format_args(obj[key], subs)
|
||||
elif isinstance(obj, list):
|
||||
return [format_args(item, subs) for item in obj]
|
||||
elif isinstance(obj, basestring) and obj[2:-2] in subs:
|
||||
obj = subs[obj[2:-2]]
|
||||
elif isinstance(obj, (int, float)):
|
||||
pass
|
||||
else:
|
||||
obj = obj % subs
|
||||
|
||||
return obj
|
||||
|
||||
|
||||
def single_argument_lambda_factory(expression, argument, name='value'):
|
||||
""" Compile and execute a lambda expression with a single argument """
|
||||
|
||||
code = compile("lambda %s: %s" % (name, expression), __file__, "eval")
|
||||
func = types.LambdaType(code, globals())()
|
||||
return func(argument)
|
||||
|
||||
|
||||
def recursive_lambda_factory(obj, arg, name='value'):
|
||||
""" Given a dict, find any lambdas, compile, and execute them. """
|
||||
|
||||
if isinstance(obj, dict):
|
||||
for key in obj:
|
||||
if key == 'lambda':
|
||||
# If so, *replace* the parent dict with the result of the expr
|
||||
obj = single_argument_lambda_factory(obj[key], arg, name)
|
||||
break
|
||||
else:
|
||||
obj[key] = recursive_lambda_factory(obj[key], arg, name)
|
||||
elif isinstance(obj, list):
|
||||
return [recursive_lambda_factory(e, arg, name) for e in obj]
|
||||
else:
|
||||
pass
|
||||
|
||||
return obj
|
||||
|
||||
|
||||
def graceful(default_return_value):
|
||||
""" A decorator that gracefully handles exceptions. """
|
||||
|
||||
def decorate(method):
|
||||
def inner(self, *args, **kwargs):
|
||||
try:
|
||||
return method(self, *args, **kwargs)
|
||||
except Exception as e:
|
||||
log.exception(e)
|
||||
log.error("From method: %r self: %r args: %r kwargs: %r" % (
|
||||
method, self, args, kwargs))
|
||||
return default_return_value
|
||||
return inner
|
||||
return decorate
|
||||
|
||||
|
||||
def notification_callback(topic, msg):
|
||||
""" This is a callback called by tahrir_api whenever something
|
||||
it deems important has happened.
|
||||
|
||||
It is just used to publish fedmsg messages.
|
||||
"""
|
||||
fedmsg.publish(
|
||||
topic=topic,
|
||||
msg=msg,
|
||||
)
|
||||
|
||||
|
||||
def user_exists_in_fas(config, user):
|
||||
""" Return true if the user exists in FAS. """
|
||||
if config.get("fasjson_base_url", False):
|
||||
# fasjson_client not available in python2, so just use requests
|
||||
os.environ["KRB5_CLIENT_KTNAME"] = config.get("keytab")
|
||||
try:
|
||||
creds = Credentials(usage="initiate")
|
||||
except exceptions.GSSError as e:
|
||||
log.error("GSSError trying to authenticate to fasjson", e)
|
||||
gssapi_auth = HTTPSPNEGOAuth(opportunistic_auth=True, creds=creds)
|
||||
session = requests.Session()
|
||||
session.auth = gssapi_auth
|
||||
return session.get(config['fasjson_base_url']+"users/"+user+"/").ok
|
||||
else:
|
||||
default_url = 'https://admin.fedoraproject.org/accounts/'
|
||||
fas2 = fedora.client.AccountSystem(
|
||||
base_url=config['fas_credentials'].get('base_url', default_url),
|
||||
username=config['fas_credentials']['username'],
|
||||
password=config['fas_credentials']['password'],
|
||||
)
|
||||
return bool(fas2.person_by_username(user))
|
||||
|
||||
def get_pagure_authors(authors):
|
||||
""" Extract the name of pagure authors from
|
||||
a dictionary
|
||||
|
||||
Args:
|
||||
authors (list): A list of dict that contains fullname and name key.
|
||||
"""
|
||||
authors_name = []
|
||||
for item in authors:
|
||||
if isinstance(item, dict):
|
||||
try:
|
||||
authors_name.append(item["name"])
|
||||
except KeyError:
|
||||
raise Exception("Multiple recipients : name not found in the message")
|
||||
return authors_name
|
|
@ -229,13 +229,3 @@
|
|||
tags:
|
||||
- badges
|
||||
- badges/backend
|
||||
|
||||
# https://raw.githubusercontent.com/fedora-infra/fedbadges/fasjson/fedbadges/utils.py
|
||||
- name: hotfix fedbadges with version from fasjson branch
|
||||
copy:
|
||||
src: fedbadges_utils.py
|
||||
dest: /usr/lib/python2.7/site-packages/fedbadges/utils.py
|
||||
when: env == "staging"
|
||||
tags:
|
||||
- badges
|
||||
- badges/backend
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue