Skip to content

Commit

Permalink
Merge pull request #105 from Scouterna/bugfix/overwritten-groupaccess
Browse files Browse the repository at this point in the history
Bugfix/overwritten groupaccess
  • Loading branch information
martin-green authored Nov 30, 2019
2 parents 61c18ce + 8d6e0e3 commit 834916e
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 22 deletions.
63 changes: 45 additions & 18 deletions dataimport.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,53 @@
import urllib2

def RunScoutnetImport(groupid, api_key, user, semester, result):
commit = True
data = None
"""
:type groupid: str
:type api_key: str
:type user: data.UserPrefs
:type semester: data.Semester
:type result: data.TaskProgress
:rtype: bool
"""
result.info('Importerar för termin %s' % semester.getname())
if groupid == None or groupid == "" or api_key == None or api_key == "":
if groupid is None or groupid == "" or api_key is None or api_key == "":
result.error(u"Du måste ange både kårid och api nyckel")
return False

success = True
try:
data = scoutnet.GetScoutnetMembersAPIJsonData(groupid, api_key)
except urllib2.HTTPError as e:
success = False
logging.error('Scoutnet http error=%s' % str(e))
result.error(u"Kunde inte läsa medlemmar från scoutnet, fel:%s" % (str(e)))
if e.code == 401:
result.error(u"Kontrollera: api nyckel och kårid. Se till att du har rollen 'Medlemsregistrerare', och möjligen 'Webbansvarig' i scoutnet")

if success and data != None:
importer = ScoutnetImporter(result)
success = importer.DoImport(data, semester)
if success:
user.groupaccess = importer.importedScoutGroup_key
user.semester = semester.key
user.hasaccess = True
user.put()
if user.groupadmin:
result.append(u"Du är kåradmin och kan dela ut tillgång till din kår för andra användare")
return success

return False

importer = ScoutnetImporter(result)
success = importer.DoImport(data, semester)
if not success:
return False

if user.activeSemester != semester.key:
user.activeSemester = semester.key
result.append('Sätter %s till vald termin.' % semester.getname())
user.put()

# Don't Connect the group if the user is an admin
if user.hasadminaccess:
return True

# Don't Connect the group if the user already has an connection
if user.groupaccess is not None:
return True

user.groupaccess = importer.importedScoutGroup_key
user.hasaccess = True
user.put()
if user.groupadmin:
result.append(u"Du är kåradmin och kan dela ut tillgång till din kår för andra användare")
return True


def GetBackupXML():
thisdate = datetime.now()
Expand Down Expand Up @@ -77,6 +95,9 @@ class ScoutnetImporter:
result = None

def __init__(self, result):
"""
:type result: data.TaskProgress
"""
self.result = result
self.commit = True
self.rapportID = 1
Expand Down Expand Up @@ -127,6 +148,12 @@ def GetOrCreateGroup(self, name, scoutnetID):
return group

def DoImport(self, data, semester):
"""
:param data: from scoutnet
:type data: str
:type semester: data.Semester
:rtype bool
"""
if not self.commit:
self.result.append("*** sparar inte, test mode ***")

Expand Down
21 changes: 18 additions & 3 deletions imports.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,32 @@ def importProgress(progress_url, update=None):
return render_template('importresult.html', tabletitle="Importresultat", rowtitle='Result', breadcrumbs=breadcrumbs)

def startAsyncImport(api_key, groupid, semester_key, user, request):
"""
:type api_key: str
:type groupid: str
:type semester_key: google.appengine.ext.ndb.Key
:type user: data.UserPrefs
:type request: werkzeug.local.LocalProxy
:rtype werkzeug.wrappers.response.Response
"""
taskProgress = TaskProgress(name='Import', return_url=request.url)
taskProgress.put()
deferred.defer(importTask, api_key, groupid, semester_key, taskProgress.key, user.key)
return redirect('/progress/' + taskProgress.key.urlsafe())

def importTask(api_key, groupid, semester_key, taskProgress_key, user_key):
semester=semester_key.get()
user = user_key.get()
"""
:type api_key: str
:type groupid: str
:type semester_key: google.appengine.ext.ndb.Key
:type taskProgress_key: google.appengine.ext.ndb.Key
:type user_key: google.appengine.ext.ndb.Key
"""
semester = semester_key.get() # type: data.Semester
user = user_key.get() # type: data.UserPrefs
progress = None
for i in range(1, 3):
progress = taskProgress_key.get()
progress = taskProgress_key.get() # type: data.TaskProgress
if progress is not None:
break
time.sleep(1) # wait for the eventual consistency
Expand Down
1 change: 1 addition & 0 deletions ireport.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

class IReport():
def __init__(self, dak, semester):
pass
Expand Down
2 changes: 1 addition & 1 deletion jsonreport.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,4 @@ def test(self):
self.assertEqual(data.dak.foereningsNamn, u"Test Scoutkår")

if __name__ == '__main__':
unittest.main()
unittest.main()
9 changes: 9 additions & 0 deletions scoutnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@


def GetScoutnetMembersAPIJsonData(groupid, api_key):
"""
:type groupid: str
:type api_key: str
:rtype: str
"""
request = urllib2.Request('https://www.scoutnet.se/api/group/memberlist?id=' + groupid + '&key=' + api_key)
response = urllib2.urlopen(request, timeout=25) # "let it throw, let it throw, let it throw..."
return response.read()
Expand All @@ -22,6 +27,10 @@ def GetValueFromJsonObject(p, key, value_name='value'):
return ''

def GetScoutnetDataListJson(json_data):
"""
:param json_data: from scoutnet
:type json_data: str
"""
j = json.loads(json_data)
result = []
for pid in j['data']:
Expand Down

0 comments on commit 834916e

Please sign in to comment.