def cartdel(user, req, cart_id): user_id = int(user) cnx = myemsldb_connect(myemsl_schema_versions=['1.6']) sql = """ select person_id, state from myemsl.cart where cart_id = %(cart_id)i; """ sys.stderr.write("SQL: %s\n" %(sql)) cursor = cnx.cursor() cursor.execute(sql, {'person_id':user_id, 'cart_id':int(cart_id)}) rows = cursor.fetchall() common_allowed_states = ['email', 'downloading', 'download_expiring', 'expiring', 'ingest'] common_allowed_states = dict([(i, 1) for i in common_allowed_states]) state = 'expired' for row in rows: state = row[1] if not ((user_id in admin_users and (state == 'admin_notified' or state in common_allowed_states)) or (int(row[0]) == user_id and state in common_allowed_states)): return 403 logger.debug("Cart delete %s" %(cart_id)) if state != 'download_expiring' and state != 'expiring' or state != 'expired': new_state = 'expiring' if state == 'downloading': new_state = 'download_expiring' sql = "update myemsl.cart set state=%(new_state)s where cart_id = %(cart_id)s;" sys.stderr.write("SQL: %s\n" %(sql)) cursor = cnx.cursor() cursor.execute(sql, {'cart_id':int(cart_id), 'new_state':new_state}) cnx.commit() #FIXME make configurable res = servicepoke.poke('/var/tmp/myemsl_cartd', 'cart_process2', 1) return 200
def cartdel(user, req, cart_id): user_id = int(user) cnx = myemsldb_connect(myemsl_schema_versions=['1.6']) sql = """ select person_id, state from myemsl.cart where cart_id = %(cart_id)i; """ sys.stderr.write("SQL: %s\n" % (sql)) cursor = cnx.cursor() cursor.execute(sql, {'person_id': user_id, 'cart_id': int(cart_id)}) rows = cursor.fetchall() common_allowed_states = [ 'email', 'downloading', 'download_expiring', 'expiring', 'ingest' ] common_allowed_states = dict([(i, 1) for i in common_allowed_states]) state = 'expired' for row in rows: state = row[1] if not ((user_id in admin_users and (state == 'admin_notified' or state in common_allowed_states)) or (int(row[0]) == user_id and state in common_allowed_states)): return 403 logger.debug("Cart delete %s" % (cart_id)) if state != 'download_expiring' and state != 'expiring' or state != 'expired': new_state = 'expiring' if state == 'downloading': new_state = 'download_expiring' sql = "update myemsl.cart set state=%(new_state)s where cart_id = %(cart_id)s;" sys.stderr.write("SQL: %s\n" % (sql)) cursor = cnx.cursor() cursor.execute(sql, {'cart_id': int(cart_id), 'new_state': new_state}) cnx.commit() #FIXME make configurable res = servicepoke.poke('/var/tmp/myemsl_cartd', 'cart_process2', 1) return 200
def cartresubmit(user, req, cart_id): user_id = int(user) if not user_id in admin_users: return 403 cnx = myemsldb_connect(myemsl_schema_versions=['1.6']) sql = """ lock table myemsl.cart; """ sys.stderr.write("SQL: %s\n" %(sql)) cursor = cnx.cursor() cursor.execute(sql, {'person_id':user_id}) sql = """ update myemsl.cart set state='submitted', last_mtime = now() where cart_id = %(cart_id)i and state='admin_notified' returning cart_id; """ sys.stderr.write("SQL: %s\n" %(sql)) cursor = cnx.cursor() cursor.execute(sql, {'cart_id':int(cart_id)}) rows = cursor.fetchall() for row in rows: cnx.commit() #FIXME make configurable res = servicepoke.poke('/var/tmp/myemsl_cartd', 'cart_process2', 1) return 200 return 404
def cartsubmit(user, req, cart_id, email_addr): user_id = int(user) cnx = myemsldb_connect(myemsl_schema_versions=['1.6']) sql = """ select person_id, state = 'ingest' from myemsl.cart where person_id = %(person_id)i and cart_id = %(cart_id)i; """ sys.stderr.write("SQL: %s\n" %(sql)) cursor = cnx.cursor() cursor.execute(sql, {'person_id':user_id, 'cart_id':int(cart_id)}) rows = cursor.fetchall() for row in rows: if int(row[0]) != user_id or row[1] != True: return 403 logger.debug("Cart submit %s" %(cart_id)) sql = """ update myemsl.cart set last_mtime = now(), submit_time = now(), state='submitted', email_address=%(email_addr)s where cart_id = %(cart_id)s; """ sys.stderr.write("SQL: %s\n" %(sql)) cursor = cnx.cursor() cursor.execute(sql, {'cart_id':int(cart_id), 'email_addr':email_addr}) cnx.commit() #FIXME make configurable res = servicepoke.poke('/var/tmp/myemsl_cartd', 'cart_process2', 1) return 200
def cartresubmit(user, req, cart_id): user_id = int(user) if not user_id in admin_users: return 403 cnx = myemsldb_connect(myemsl_schema_versions=['1.6']) sql = """ lock table myemsl.cart; """ sys.stderr.write("SQL: %s\n" % (sql)) cursor = cnx.cursor() cursor.execute(sql, {'person_id': user_id}) sql = """ update myemsl.cart set state='submitted', last_mtime = now() where cart_id = %(cart_id)i and state='admin_notified' returning cart_id; """ sys.stderr.write("SQL: %s\n" % (sql)) cursor = cnx.cursor() cursor.execute(sql, {'cart_id': int(cart_id)}) rows = cursor.fetchall() for row in rows: cnx.commit() #FIXME make configurable res = servicepoke.poke('/var/tmp/myemsl_cartd', 'cart_process2', 1) return 200 return 404
def cartsubmit(user, req, cart_id, email_addr): user_id = int(user) cnx = myemsldb_connect(myemsl_schema_versions=['1.6']) sql = """ select person_id, state = 'ingest' from myemsl.cart where person_id = %(person_id)i and cart_id = %(cart_id)i; """ sys.stderr.write("SQL: %s\n" % (sql)) cursor = cnx.cursor() cursor.execute(sql, {'person_id': user_id, 'cart_id': int(cart_id)}) rows = cursor.fetchall() for row in rows: if int(row[0]) != user_id or row[1] != True: return 403 logger.debug("Cart submit %s" % (cart_id)) sql = """ update myemsl.cart set last_mtime = now(), submit_time = now(), state='submitted', email_address=%(email_addr)s where cart_id = %(cart_id)s; """ sys.stderr.write("SQL: %s\n" % (sql)) cursor = cnx.cursor() cursor.execute(sql, {'cart_id': int(cart_id), 'email_addr': email_addr}) cnx.commit() #FIXME make configurable res = servicepoke.poke('/var/tmp/myemsl_cartd', 'cart_process2', 1) return 200
#!/usr/bin/python import servicepoke error = servicepoke.poke('/tmp/poke.sock', 'foo') if error: print error
def notify(transaction, writer): # FIXME make configurable res = servicepoke.poke("/var/tmp/myemsl_elasticsearch", "simple_items", 1) transaction = int(transaction) sql = """ select type, name, p.group_id is not NULL as proposal from (with recursive t(group_id) as (select group_id from myemsl.group_items, myemsl.files where transaction=%(trans)s and myemsl.group_items.item_id = myemsl.files.item_id group by group_id union select parent_id as group_id from myemsl.subgroups as s, t where s.child_id = t.group_id ) select t.group_id, type, name from t, myemsl.groups as g where t.group_id = g.group_id ) as g left join eus.proposals as p on p.group_id = g.group_id; """ group_ids_for_item_id_sql = """ SELECT type, name, p.group_id is not NULL AS proposal FROM ( WITH RECURSIVE t(group_id) AS ( SELECT group_id FROM myemsl.group_items WHERE myemsl.group_items.item_id = %(item_id)s GROUP BY group_id UNION SELECT parent_id AS group_id FROM myemsl.subgroups AS s, t WHERE s.child_id = t.group_id ) SELECT t.group_id, type, name FROM t, myemsl.groups AS g WHERE t.group_id = g.group_id ) as g LEFT JOIN eus.proposals AS p ON p.group_id = g.group_id; """ sys.stderr.write("SQL: %s\n" % (sql)) cnx = myemsldb_connect(myemsl_schema_versions=["1.0"]) cursor = cnx.cursor() cursor.execute(sql, {"trans": transaction}) rows = cursor.fetchall() groups = [] proposals = [] for row in rows: type = row[0] name = row[1] is_proposal = row[2] groups.append([type, name]) if is_proposal: proposals.append(name) sql = """ select subdir, name, item_id from myemsl.files where transaction=%(trans)s; """ cursor = cnx.cursor() cursor.execute(sql, {"trans": transaction}) rows = cursor.fetchall() filenames = [] file_groups = {} for row in rows: subdir = row[0] name = row[1] if subdir == None: subdir = "" if subdir != "": subdir = "%s/" % (subdir) cursor = cnx.cursor() cursor.execute(group_ids_for_item_id_sql, {"item_id": row[2]}) file_groups["%s%s" % (subdir, name)] = cursor.fetchall() filenames.append("%s%s" % (subdir, name)) sql = """ select submitter from myemsl.transactions where transaction=%(trans)s; """ cursor = cnx.cursor() cursor.execute(sql, {"trans": transaction}) rows = cursor.fetchall() submitter = None for row in rows: submitter = row[0] nntp = nntplib.NNTP(config.get("notification", "nntp_server")) f = tempfile.TemporaryFile(mode="w+") f.write("From: svc-myemsl <*****@*****.**>\n") f.write("Newsgroups: local.myemsl.incoming.notifications\n") f.write("Subject: %s\n" % (transaction)) f.write("Mime-Version: 1.0\n") f.write("Content-Type: text/plain; charset=US-ASCII\n") f.write("Content-Transfer-Encoding: 7bit\n\n") f.write('<?xml version="1.0"?>\n') f.write('<myemsl version="1.0.0">\n') f.write(" <submitter>%s</submitter>\n" % (submitter)) f.write(" <transaction>%s</transaction>\n" % (transaction)) f.write(" <groups>\n") for (type, name) in groups: f.write(" <group><type>%s</type><name>%s</name></group>\n" % (type, name)) f.write(" </groups>\n") f.write(" <proposals>\n") for name in proposals: f.write(" <proposal>%s</proposal>\n" % (name)) f.write(" </proposals>\n") f.write(" <files>\n") for n in filenames: f.write(" <file>\n <name>%s</name>\n <groups>\n" % (n)) for (type, name, is_proposal) in file_groups[n]: f.write(" <group><type>%s</type><name>%s</name></group>\n" % (type, name)) f.write(" </groups>\n </file>\n") f.write(" </files>\n") f.write("</myemsl>\n") f.seek(0) nntp.post(f) writer.write("OK") return 0