Example #1
0
def load_playgrounds(path='data/playgrounds.csv'):
    """
    Load playground data from the CSV into sqlite.

    NOTE: THIS HAS NOT BEEN TESTED IN A VERY LONG TIME.
    """
    features = copytext.Copy(app_config.COPY_PATH)['feature_list']

    with open(path) as f:
        rows = CSVKitDictReader(f)

        for row in rows:
            if row['Duplicate'] == 'TRUE':
                #print 'Skipping duplicate: %s' % row['NAME']
                continue

            playground = Playground.create(
                nprid=row['NPRID'],
                name=row['NAME'],
                facility=row['FACILITY'],
                facility_type=row['FACILITY_TYPE'],
                address=row['ADDRESS'],
                city=row['CITY'],
                state=row['STATE'],
                zip_code=row['ZIP'],
                longitude=float(row['LONGITUDE']) if row['LONGITUDE'] else None,
                latitude=float(row['LATITUDE']) if row['LATITUDE'] else None,
                agency=row['Agency'],
                agency_type=row['AgencyType'],
                owner=row['OWNER'],
                owner_type=row['OWNER_TYPE'],
                remarks=row['REMARKS'],
                public_remarks=row['PubRermarks'],
                url=row['url'],
                entry=row['Entry'],
                source=row['Source']
            )

            for feature in features:
                slug = feature['key']

                if row[slug] == 'TRUE':
                    PlaygroundFeature.create(
                        slug=slug,
                        playground=playground
                    )

            Revision.create(
                timestamp=datetime.datetime.now(pytz.utc),
                action='insert',
                playground=playground,
                log=json.dumps([]),
                headers='',
                cookies='',
                revision_group=1
            )
Example #2
0
def update_artboard(request):
    try:
        defs_elms = []
        project_name = request.session['project']
        redirection = '/exegesis/artboards?project=' + project_name
        artboard_uuid = request.POST.get('artboard-uuid')
        ArtBoard.objects.filter(project__project__contains=project_name, uuid=artboard_uuid).update(latest=False,
                                                                                                    last_updated=datetime.now())
        old_art = ArtBoard.objects.get(project__project__contains=project_name, uuid=artboard_uuid)
        revision = Revision(name=old_art.artboard, artboard=old_art)
        revision.save()
        images_path = os.path.join('parse_svg', 'templates', 'uploads')
        if not os.path.exists(images_path):
            os.makedirs(images_path)
        for f in request.FILES.getlist('svgfile'):
            filename = f.name
            print 'filename: ', filename
            img_data = f.read()
            uuid_name = uuid.uuid4()
            img_name = "%s.%s" % (uuid_name, 'svg')
            image_path = 'uploads/' + img_name
            url = image_path
            with open(os.path.join(images_path, img_name), "wb") as image:
                image.write(img_data)
            tree = ET.parse(os.path.join(settings.BASE_DIR, 'parse_svg', 'templates') + '/' + url)
            root = tree.getroot()
            for child in root.iter():
                if child.tag.split('}')[1] == 'defs':
                    for subchild in child.iter():
                        defs_elms.append(subchild)
            for child in root.iter():
                if child not in defs_elms:
                    attribute = child.attrib
                    if 'id' in child.attrib:
                        elem_id = check_for_id()
                        child.set('id', elem_id)
                    if child.tag.split('}')[1] == 'use' and 'id' not in attribute.keys() or child.tag.split('}')[
                        1] == 'text' and 'id' not in attribute.keys():
                        elem_id = check_for_id()
                        child.set('id', elem_id)
            tree.write(os.path.join(settings.BASE_DIR, 'parse_svg', 'templates') + '/' + url)
            Project.objects.filter(project=project_name, email=request.user.email).update(thumbnail=url)
            project = Project.objects.get(project=project_name, email=request.user.email)
            filename = filename.split('.')[0]
            new_entry = ArtBoard(project=project, artboard=filename, location=url, uuid=uuid_name, latest=True,
                                 created=datetime.now(), last_updated=datetime.now())
            new_entry.save()
            Project.objects.filter(project=project_name).update(last_updated=datetime.now())
            return redirect(redirection)
    except:
        print sys.exc_info()
        return render(request, 'wrong.html')
Example #3
0
def load_playgrounds(path='data/playgrounds.csv'):
    """
    Load playground data from the CSV into sqlite.

    NOTE: THIS HAS NOT BEEN TESTED IN A VERY LONG TIME.
    """
    features = copytext.Copy(app_config.COPY_PATH)['feature_list']

    with open(path) as f:
        rows = CSVKitDictReader(f)

        for row in rows:
            if row['Duplicate'] == 'TRUE':
                #print 'Skipping duplicate: %s' % row['NAME']
                continue

            playground = Playground.create(
                nprid=row['NPRID'],
                name=row['NAME'],
                facility=row['FACILITY'],
                facility_type=row['FACILITY_TYPE'],
                address=row['ADDRESS'],
                city=row['CITY'],
                state=row['STATE'],
                zip_code=row['ZIP'],
                longitude=float(row['LONGITUDE'])
                if row['LONGITUDE'] else None,
                latitude=float(row['LATITUDE']) if row['LATITUDE'] else None,
                agency=row['Agency'],
                agency_type=row['AgencyType'],
                owner=row['OWNER'],
                owner_type=row['OWNER_TYPE'],
                remarks=row['REMARKS'],
                public_remarks=row['PubRermarks'],
                url=row['url'],
                entry=row['Entry'],
                source=row['Source'])

            for feature in features:
                slug = feature['key']

                if row[slug] == 'TRUE':
                    PlaygroundFeature.create(slug=slug, playground=playground)

            Revision.create(timestamp=datetime.datetime.now(pytz.utc),
                            action='insert',
                            playground=playground,
                            log=json.dumps([]),
                            headers='',
                            cookies='',
                            revision_group=1)
Example #4
0
def view_edit(req, page_name):
    page = _get_page(page_name)
    if req.method == 'POST':
        if page is None:
            page = Page(name=page_name)
            page.save()
        rev = Revision(page=page, text=req.form.get('text'))
        rev.save()
        session.commit()
        return redirect_to('show', page_name=page.name)
    else:
        if page is not None:
            page_name = page.name
        return render_response('edit.jinja', page=page, page_name=page_name)
Example #5
0
File: file.py Project: sqba/zentxt
    def post(self):
        #        if not self.check_user():
        #            return

        file_id = self.request.get("id")
        file = self.get_file(file_id)
        if file is None:
            self.response.out.write(file_id + " not found")
            return

        if self.get_file_permission(file) < base.ACCESS_WRITE:
            self.response.out.write("permission denied")
            return

        new_text = self.request.get('content')

        self.log_info("new_text = " + new_text)

        if self.has_text_changed(file, new_text):
            revision = Revision()
            revision.author = self.get_current_user()
            revision.content = new_text
            revision.file = file
            revision.prev = file.head
            revision.put()

            file.head = revision
            file.put()
Example #6
0
 def post(self, page_name):
     page = Page.by_name(page_name)
     if self.user:
         body = self.request.get('content')
     else:  # if posted while not logged in.
         self.write('ERROR: not logged in.')
         self.abort()
     if not page:  # For creatubg a new page.
         page = Page(title=page_name)
         page.put()
     revision = Revision(body=body, user=self.user, parent=page)
     revision.put()
     page.revision = revision
     page.put()
     self.redirect_to('WikiPage', page_name=page_name)
Example #7
0
 def post(self, page_name):
     page = Page.by_name(page_name)
     if self.user:
         body = self.request.get('content')
     else:  # if posted while not logged in.
         self.write('ERROR: not logged in.')
         self.abort()
     if not page:  # For creatubg a new page.
         page = Page(title=page_name)
         page.put()
     revision = Revision(body=body, user=self.user, parent=page)
     revision.put()
     page.revision = revision
     page.put()
     self.redirect_to('WikiPage', page_name=page_name)
Example #8
0
    def test_process_updates_simple(self):
        utils.load_test_playgrounds()

        updated_playgrounds, revision_group = data.process_changes('tests/data/test_updates_simple.json')

        self.assertEqual(len(updated_playgrounds), 1)

        playground = Playground.select().where(Playground.id == updated_playgrounds[0].id)[0]
        self.assertEqual(playground.id, 1)
        self.assertEqual(playground.name, 'NEW NAME')

        revisions = Revision.select().where(Revision.revision_group == revision_group)

        self.assertEqual(revisions.count(), 1)

        revision = revisions[0]
        self.assertEqual(revision.playground.id, playground.id)

        log = revision.get_log()
        self.assertEqual(len(log), 2)
        self.assertEqual(log[0]['field'], 'name')
        self.assertEqual(log[0]['from'], 'Strong Reach Playground')
        self.assertEqual(log[0]['to'], 'NEW NAME')
        self.assertEqual(log[1]['field'], 'smooth-surface-throughout')
        self.assertEqual(log[1]['from'], 1)
        self.assertEqual(log[1]['to'], 0)

        headers = revision.get_headers()
        self.assertEqual(headers['content_length'], '18')
        self.assertEqual(headers['host'], 'localhost')

        cookies = revision.get_cookies()
        self.assertEqual(len(cookies), 0)
Example #9
0
    def test_process_inserts(self):
        models.delete_tables()
        models.create_tables()

        new_playgrounds, revision_group = data.process_changes(
            'tests/data/test_inserts.json')

        self.assertEqual(len(new_playgrounds), 1)

        playground = Playground.select().where(
            Playground.id == new_playgrounds[0].id)[0]
        self.assertEqual(playground.name, 'NEW NAME')

        revisions = Revision.select().where(
            Revision.revision_group == revision_group)

        self.assertEqual(revisions.count(), 1)

        revision = revisions[0]
        self.assertEqual(revision.playground.id, playground.id)

        log = revision.get_log()
        self.assertEqual(len(log), 1)
        self.assertEqual(log[0]['field'], 'name')
        self.assertEqual(log[0]['from'], '')
        self.assertEqual(log[0]['to'], 'NEW NAME')

        headers = revision.get_headers()
        self.assertEqual(headers['content_length'], '18')
        self.assertEqual(headers['host'], 'localhost')

        cookies = revision.get_cookies()
Example #10
0
 def get(self,rev_key):
     rev = Revision.get(rev_key)
     class_key = rev.lect_class
     lect_class = LectClass.get(class_key)
     qs = get_rev_set(rev)
     q_count = len(qs)
     #see if student had attempted test before
     user = self.get_user()
     student = user['user']
     attempt = RevisionAttempt.gql('WHERE student=:1 AND revision=:2 ORDER BY created DESC',student,rev).fetch(1)
     class_hidden1 = ""
     class_hidden2=""
     score = ""
     started = ""
     akey = ""
     if len(attempt)>0:
         class_hidden1 = "js-hidden"
         score = attempt[0].score
         started = attempt[0].created
         akey = attempt[0].key()
     else:
         class_hidden2 = "js-hidden"
     extra = {
              'class_hidden1':class_hidden1,
              'class_hidden2':class_hidden2,
              'score':score,
              'started':started,
              'akey':akey
              }
     self.render("explore-revision.html",rev=rev,qs=qs,lect_class=lect_class,extra = extra,q_count=q_count)
Example #11
0
    def test_process_inserts(self):
        models.delete_tables()
        models.create_tables()

        new_playgrounds, revision_group = data.process_changes('tests/data/test_inserts.json')

        self.assertEqual(len(new_playgrounds), 1)

        playground = Playground.select().where(Playground.id == new_playgrounds[0].id)[0]
        self.assertEqual(playground.name, 'NEW NAME')

        revisions = Revision.select().where(Revision.revision_group == revision_group)

        self.assertEqual(revisions.count(), 1)

        revision = revisions[0]
        self.assertEqual(revision.playground.id, playground.id)

        log = revision.get_log()
        self.assertEqual(len(log), 1)
        self.assertEqual(log[0]['field'], 'name')
        self.assertEqual(log[0]['from'], '')
        self.assertEqual(log[0]['to'], 'NEW NAME')

        headers = revision.get_headers()
        self.assertEqual(headers['content_length'], '18')
        self.assertEqual(headers['host'], 'localhost')

        cookies = revision.get_cookies()
Example #12
0
    def get(self):
        if not self.check_user(False):
            #self.logged_user_home()
            self.redirect('/')
            return

        max_results = 10
        tmp = self.request.get("max")
        if len(tmp):
            max_results = int(tmp)

        query = File.gql("WHERE author = :1", self.get_current_user())
        files = query.fetch(max_results)

        if len(files) > 0:
            head = files[0].head
        else:
            head = Revision()

        user = users.User(base.SUGGESTIONS_USER)
        query = File.gql("WHERE author = :1", user)
        public_files = query.fetch(50)
        files = files + public_files

        template_values = {
            'user': self.get_current_user(),
            'files': files,
            'head': head,
            'login_url': users.create_login_url(self.request.uri)
        }

        path = self.get_template_path('files.html')
        self.response.out.write(template.render(path, template_values))
Example #13
0
def process_changes(path='changes-in-progress.json'):
    """
    Iterate over changes-in-progress.json and process its contents.
    """
    revision_group = time.mktime((datetime.datetime.now(pytz.utc)).timetuple())

    with open(path) as f:
        changes = json.load(f)

    changed_playgrounds = []

    ACTIONS = {
        'update': process_update,
        'insert': process_insert,
        'delete-request': process_delete
    }

    for record in changes:
        action = ACTIONS[record['action']]

        playground, revisions = action(record)
        changed_playgrounds.append(playground)

        timestamp = datetime.datetime.fromtimestamp(record['timestamp']).replace(tzinfo=pytz.utc)

        # Assign the request headers to a variable.
        # Need to modify the headers to add the remote IP address which is
        # on the request object but not in the headers area.
        # Why? Because we don't want to add an additional field to the
        # Revisions model because we don't have DB migrations.
        headers = record['request']['headers']
        headers['remote_ip_address'] = record['request'].get('ip_address', None)

        Revision.create(
            timestamp=timestamp,
            action=record['action'],
            playground=playground,
            log=json.dumps(revisions),
            headers=json.dumps(headers),
            cookies=json.dumps(record['request']['cookies']),
            revision_group=revision_group
        )

    # Ensure all changes have been written to disk
    database.commit()

    return (changed_playgrounds, revision_group)
Example #14
0
def process_changes(path='changes-in-progress.json'):
    """
    Iterate over changes-in-progress.json and process its contents.
    """
    revision_group = time.mktime((datetime.datetime.now(pytz.utc)).timetuple())

    with open(path) as f:
        changes = json.load(f)

    changed_playgrounds = []

    ACTIONS = {
        'update': process_update,
        'insert': process_insert,
        'delete-request': process_delete
    }

    for record in changes:
        action = ACTIONS[record['action']]

        playground, revisions = action(record)
        changed_playgrounds.append(playground)

        timestamp = datetime.datetime.fromtimestamp(
            record['timestamp']).replace(tzinfo=pytz.utc)

        # Assign the request headers to a variable.
        # Need to modify the headers to add the remote IP address which is
        # on the request object but not in the headers area.
        # Why? Because we don't want to add an additional field to the
        # Revisions model because we don't have DB migrations.
        headers = record['request']['headers']
        headers['remote_ip_address'] = record['request'].get(
            'ip_address', None)

        Revision.create(timestamp=timestamp,
                        action=record['action'],
                        playground=playground,
                        log=json.dumps(revisions),
                        headers=json.dumps(headers),
                        cookies=json.dumps(record['request']['cookies']),
                        revision_group=revision_group)

    # Ensure all changes have been written to disk
    database.commit()

    return (changed_playgrounds, revision_group)
Example #15
0
 def get(self, page_name):
     revisions = Revision.by_page_name(page_name)
     if revisions:
         revisions = revisions.order('-date')
     self.render('history.jinja',
                 page_name=page_name,
                 revisions=revisions,
                 user=self.user)
Example #16
0
File: base.py Project: sqba/zentxt
 def get_revision_by_id(self, id):
     rev_key = db.Key(id)
     query = Revision.gql("WHERE __key__ = :1", db.Key(id))
     entities = query.fetch(1)
     if len(entities) > 0:
         rev = entities[0]
         return rev
     return None
Example #17
0
 def delete_revision(self, args, user):
     messages = []
     search = ''
     if len(args) <= 1:
         raise Exception(
             'Revision delte syntax\n```css\n.d revision delete "NAME"```')
     if len(args) > 1:
         search = ' '.join(args[2:])
         revision = Revision().find(search)
     if not revision:
         return [f'"{search}"" was not found. No changes made.']
     else:
         search = str(revision.name)
         revision.archived = True
         self.save(revision, user)
         messages.append(f'***{search}*** removed')
         return messages
Example #18
0
File: base.py Project: sqba/zentxt
 def get_revision_by_id(self, id):
     rev_key = db.Key(id)
     query = Revision.gql("WHERE __key__ = :1", db.Key(id))
     entities = query.fetch(1)
     if len(entities) > 0:
         rev = entities[0]
         return rev
     return None
Example #19
0
def get_entry_template():
    tmp = Entry()
    tmp.revisions.append(Revision(content='', rows=0))
    return render_template(
        'entry.html',
        #create a fake single entry so the template renders a single entry div
        entries=[tmp],
        standalone=True)  #prevent jinja2 from rendering the parent template
Example #20
0
 def get(self, page_name):
     revisions = Revision.by_page_name(page_name)
     if revisions:
         revisions = revisions.order('-date')
     self.render('history.jinja',
                 page_name=page_name,
                 revisions=revisions,
                 user=self.user)
Example #21
0
def edit(request, name):
    """Allows users to edit wiki pages."""
    try:
        page = Page.objects.get(name=name)
    except Page.DoesNotExist:
        page = None

    if request.method == 'POST':
        form = PageForm(request.POST)
        if form.is_valid():
            if not page:
                page = Page()
            page.name = form.cleaned_data['name']
            page.save()

            revision = Revision()
            revision.page = page
            revision.content = form.cleaned_data['content']
            if request.user.is_authenticated():
                revision.editor = request.user
            revision.save()
            return HttpResponseRedirect(page.get_absolute_url())
    else:
        if page:
            revision = page.get_latest_revision()
            form = PageForm(initial={'name': page.name, 'content': revision.content})
        else:
            form = PageForm(initial={'name': name})

    ctx = { 'form': form }
    return render_to_response('wiki/edit.html', ctx, context_instance=RequestContext(request))
Example #22
0
File: file.py Project: sqba/zentxt
    def post(self):
#        if not self.check_user():
#            return

        file_id = self.request.get("id")
        file = self.get_file( file_id )
        if file is None:
            self.response.out.write(file_id + " not found")
            return

        if self.get_file_permission(file) < base.ACCESS_WRITE:
            self.response.out.write("permission denied")
            return

        new_text = self.request.get('content')

        self.log_info("new_text = " + new_text)

        if self.has_text_changed(file, new_text):
            revision = Revision()
            revision.author     = self.get_current_user()
            revision.content    = new_text
            revision.file       = file
            revision.prev       = file.head
            revision.put()
            
            file.head = revision
            file.put()
Example #23
0
def getrevisionset(rev_key='',email=''):
    #test revision
    logging.info("Function getrev... called")
    rev = Revision.get(rev_key)
    if rev:
        rev_set = get_rev_set_raw(rev)
        logging.info(rev_set)
        return rev_set
    else:
        return ["nothing"]
Example #24
0
def save(name):

    revision = Page.by_name(name)
    text = request.form.get('text')
    note = request.form.get('note')

    if request.form.get('cancel') or \
        revision and revision.text == text:
        return web.redirect(web.url_for('show', name=name))
    elif not text:
        error = _('You cannot save empty revisions.')
    else:
        note = request.form.get('note', '')
        page = revision.page if revision else Page(name=name)
        revision = Revision(text=text, page=page, note=note)
        revision.save()
        db.commit()

    return web.redirect(web.url_for('show', name=name))
Example #25
0
def revert(name):
    """Revert an old revision."""
    rev_id = request.args.get('rev')
    try:
        rev_id = int(rev_id)
    except:
        pass

    old_revision = page = None
    error = _('No such revision')

    if request.method == 'POST' and request.form.get('cancel'):
        return web.redirect(web.url_for('show', name=page_name))

    if rev_id:
        old_revision = Page.by_revision(rev_id)
        if old_revision:
            new_revision = Page.by_name(name)
            if old_revision == new_revision:
                error = _('You tried to revert the current active ' \
                          'revision.')
            elif old_revision.text == new_revision.text:
                error = _('There are no changes between the current ' \
                          'revision and the revision you want to ' \
                          'restore.')
            else:
                error = ''
                page = old_revision.page
                if request.method == 'POST':
                    note = request.form.get('note', '')
                    note = 'revert' + (note and ': ' + note or '')
                    revision = Revision(page=page, text=old_revision.text,
                                         note=note)
                    revision.save()
                    db.commit()
                    return web.redirect(web.url_for('show', name=name))

    return web.render_template('revert.html',
        error=error,
        old_revision=old_revision,
        revision=page
    )
Example #26
0
 def get_revisions(self, file):
     try:
         max_results = 10
         tmp = self.request.get("max")
         if len(tmp):
             max_results = int(tmp)
         query = Revision.gql("WHERE file = :1 ORDER BY date DESC", file)
         #.filter('__key__ != :1', file.head.key())
         return query.fetch(max_results)
     except: #BadKeyError:
         return None
Example #27
0
def update_entry(entry_id=None):
    '''Update an existing entry at /update/entry_id/ or make a new one at /update/.
	Returns the entry_id of the new or updated entry.'''
    entry = Entry()
    if entry_id != None:
        entry = Entry.objects(id=entry_id)[0]
    revision = Revision(content=request.form['content'],
                        rows=request.form['rows'])
    entry.add_revision(revision)
    entry.save()
    return str(entry.id)
Example #28
0
 def get(self, page_name):
     page = Page.by_name(page_name)
     revision = None
     revision_id = self.request.get('v')
     if revision_id:  # if a specific revision is requested
         revision = Revision.by_id(revision_id, page)
     self.render('edit.jinja',
                 page_name=page_name,
                 revision=revision,
                 user=self.user,
                 page=page)
Example #29
0
    def get(self, page_name):
        revisions = Revision.by_page_name(page_name)
        if revisions:
            revisions = revisions.order('-date')

        revision_id = self.request.get('v')
        revision = None
        if revision_id:
            revision = Revision.by_id(revision_id, page_name)
        else:
            revisions = Revision.by_page_name(page_name)
            if revisions:
                revision = revisions.order('-date').get()
        if revision:
            self.render('page.jinja', page_name=page_name,
                        revision=revision,
                        user=self.user,
                        revisions=revisions)
        else:
            self.redirect_to('_edit', page_name=page_name)
Example #30
0
File: file.py Project: sqba/zentxt
 def get(self):
     if self.check_user(False):
         query = Revision.gql("WHERE author = :1 ORDER BY date DESC", self.get_current_user())
         revs = query.fetch(1)
         if len(revs) > 0:
             file_id = revs[0].file.key()
         else:
             file_id = self.create_file("New File")
     else:
             file_id = self.get_public_file_id()
     self.response.out.write(file_id)
Example #31
0
    def get(self, page_name):
        revisions = Revision.by_page_name(page_name)
        if revisions:
            revisions = revisions.order('-date')

        revision_id = self.request.get('v')
        revision = None
        if revision_id:
            revision = Revision.by_id(revision_id, page_name)
        else:
            revisions = Revision.by_page_name(page_name)
            if revisions:
                revision = revisions.order('-date').get()
        if revision:
            self.render('page.jinja',
                        page_name=page_name,
                        revision=revision,
                        user=self.user,
                        revisions=revisions)
        else:
            self.redirect_to('_edit', page_name=page_name)
Example #32
0
 def get(self, page_name):
     page = Page.by_name(page_name)
     revision = None
     revision_id = self.request.get('v')
     if revision_id:  # if a specific revision is requested
         revision = Revision.by_id(revision_id, page)
     self.render(
         'edit.jinja',
         page_name=page_name,
         revision=revision,
         user=self.user,
         page=page)
Example #33
0
File: file.py Project: sqba/zentxt
 def get(self):
     if self.check_user(False):
         query = Revision.gql("WHERE author = :1 ORDER BY date DESC",
                              self.get_current_user())
         revs = query.fetch(1)
         if len(revs) > 0:
             file_id = revs[0].file.key()
         else:
             file_id = self.create_file("New File")
     else:
         file_id = self.get_public_file_id()
     self.response.out.write(file_id)
    def name(self, args):
        """Display and create a new Revision by name
        
        Parameters
        ----------
        args : list(str)
            List of strings with subcommands

        Returns
        -------
        list(str) - the response messages string array
        """

        if not self.can_edit:
            raise Exception('You do not have permission to add revision text')
        messages = []
        rev_name = ' '.join(args[1:])
        if args[1] == 'rename':
            if len(args) < 4:
                raise Exception(
                    'syntax: ```css\n.d revision rename "ORIGINAL NAME" "NEW NAME"```'
                )
            rev_name_orig = ' '.join(args[2])
            rev_name_new = ' '.join(args[3])
            revision_new = Revision().find(rev_name_new)
            if revision_new:
                raise Exception(
                    f'Cannot rename to _{rev_name_new}_. Revision already exists'
                )
            else:
                revision = Revision().find(rev_name_orig)
                if not rev_name_orig:
                    raise Exception(
                        f'Cannot find original revision named _{rev_name_orig}_'
                    )
                revision.name = rev_name_new
                revision_svc.save(revision, self.user)
                messages.append(revision.get_string(self.user))
        else:
            if len(args) < 4:
                raise Exception(
                    'syntax: ```css\n.d revision name "NAME" "NUMBER" "TEXT"```'
                )
            rev_name = args[1]
            rev_number = args[2]
            rev_text = args[3]
            params = {'name': rev_name, 'number': rev_number, 'text': rev_text}
            revision = Revision().create_new(**params)
            messages.append(revision.get_string(self.user))
        return messages
Example #35
0
def commitRevision():
    # Get list all production in magazine, not SoldOut
    # Get List from magazine
    # All not SoldOut and FromMagazine OK
    # other not OK

    user_id = 1
    id_shop = 4
    bc_from_revision = [
        7895, 7896, 7897, 7898, 7899, 7900, 7901, 7902, 7903, 7904, 7905, 7906,
        7907, 7908, 7909, 7910, 7911, 7912, 7913, 7914, 7915, 7916, 7917, 7918,
        7919, 7920, 7921, 7922, 7923, 7924, 7925, 7926, 7927, 7928, 7929, 7930,
        7931, 7932, 7933, 7934, 7935, 8516, 8517, 8518, 8519, 8520, 8521, 8522,
        8523, 8524, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8533, 8534,
        8535, 8536, 8537, 8538, 8539, 8540, 8541, 8542, 8543, 8544, 8545, 8546,
        8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557
    ]

    send_to_shops = SendToShop.objects.filter(Shop_id=Shop.objects.get(
        id=id_shop))
    productToShop = ProductToShop.objects.filter(
        SendToShop_id__in=send_to_shops)
    bar_codes = BarCode.objects.filter(ProductToShop_id__in=productToShop,
                                       SoldOut=False)

    revision = Revision(DateTime=datetime.datetime.now(),
                        User_id=User.objects.get(id=user_id))
    revision.save()

    for bar_code in bar_codes:
        if bar_code.id in bc_from_revision:
            revisionHasBarCode = RevisionHasBarCode(Revision_id=revision,
                                                    BarCode=bar_code,
                                                    OK=True)
        else:
            revisionHasBarCode = RevisionHasBarCode(Revision_id=revision,
                                                    BarCode=bar_code,
                                                    OK=False)

        revisionHasBarCode.save()
Example #36
0
def _list_revision_groups():

    context = {}
    context['revision_groups'] = Set([])

    revisions = Revision.select()

    for revision in revisions:
        revision_date = datetime.datetime.fromtimestamp(revision.revision_group)
        context['revision_groups'].add((revision_date, revision.revision_group))

    context['revision_groups'] = sorted(context['revision_groups'], key=lambda g: g[0], reverse=True)

    return render_template('_email_list.html', **context)
Example #37
0
def menu(bot, update):
    uid = update.effective_user.id

    is_admin = uid in settings.ADMINS
    buttons = _admin_buttons(send_botlist_button=is_admin,
                             logs_button=is_admin)

    txt = "🛃 Administration menu. Current revision: {}".format(
        Revision.get_instance().nr)
    bot.formatter.send_message(uid,
                               txt,
                               reply_markup=ReplyKeyboardMarkup(
                                   buttons, resize_keyboard=True))
    return BotStates.ADMIN_MENU
Example #38
0
    def extract_results(self, query_resp):
        ret = []
        # redirect_list = query_resp.get('redirects', [])  # TODO
        # redirects = dict([(r['from'], r['to']) for r in redirect_list])
        requested_title = self.input_param
        is_parsed = self.kwargs.get("rvparse", False)

        pages = query_resp.get("pages", {})
        for page_id, pid_dict in pages.iteritems():
            if int(page_id) < 0:
                continue
            rev_dict = dict(pid_dict)
            rev_dict.update(pid_dict["revisions"][0])
            revision = Revision.from_query(rev_dict, source=self.source, is_parsed=is_parsed)
            revision.req_title = requested_title
            ret.append(revision)
        return ret
Example #39
0
def _list_revision_groups():

    context = {}
    context['revision_groups'] = Set([])

    revisions = Revision.select()

    for revision in revisions:
        revision_date = datetime.datetime.fromtimestamp(
            revision.revision_group)
        context['revision_groups'].add(
            (revision_date, revision.revision_group))

    context['revision_groups'] = sorted(context['revision_groups'],
                                        key=lambda g: g[0],
                                        reverse=True)

    return render_template('_email_list.html', **context)
Example #40
0
def _playground(playground_slug):
    """
    Playground detail page.
    """
    from flask import request
    context = make_context()

    context['playground'] = Playground.get(slug=playground_slug)
    context['fields'] = context['playground'].update_form()
    context['features'] = context['playground'].update_features_form()
    context['revisions'] = Revision.select()\
                            .where(Revision.playground == context['playground'].id)\
                            .where((Revision.action == 'insert') | (Revision.action == 'update'))\
                            .order_by(Revision.timestamp.desc())
    context['display_field_name'] = display_field_name
    context['path'] = request.path

    return render_template('playground.html', **context)
Example #41
0
def _playground(playground_slug):
    """
    Playground detail page.
    """
    from flask import request
    context = make_context()

    context['playground'] = Playground.get(slug=playground_slug)
    context['fields'] = context['playground'].update_form()
    context['features'] = context['playground'].update_features_form()
    context['revisions'] = Revision.select()\
                            .where(Revision.playground == context['playground'].id)\
                            .where((Revision.action == 'insert') | (Revision.action == 'update'))\
                            .order_by(Revision.timestamp.desc())
    context['display_field_name'] = display_field_name
    context['path'] = request.path

    return render_template('playground.html', **context)
Example #42
0
    def extract_results(self, query_resp):
        ret = []
        #redirect_list = query_resp.get('redirects', [])  # TODO
        #redirects = dict([(r['from'], r['to']) for r in redirect_list])
        requested_title = self.input_param
        is_parsed = self.kwargs.get('rvparse', False)

        pages = query_resp.get('pages', {})
        for page_id, pid_dict in pages.iteritems():
            if int(page_id) < 0:
                continue
            rev_dict = dict(pid_dict)
            rev_dict.update(pid_dict['revisions'][0])
            revision = Revision.from_query(rev_dict,
                                           source=self.source,
                                           is_parsed=is_parsed)
            revision.req_title = requested_title
            ret.append(revision)
        return ret
Example #43
0
    def test_prepare_email(self):
        utils.load_test_playgrounds()

        playground = Playground.get(id=1)

        log = '''[{
            "field": "name",
            "from": "%s",
            "to": "Test Playground"
        }]''' % playground.name

        Revision(action='update',
                 timestamp=time.mktime(
                     datetime.datetime.now(pytz.utc).timetuple()),
                 playground=playground,
                 log=log,
                 headers='',
                 cookies='',
                 revision_group=1).save()

        body = app._prepare_email(1)

        self.assertTrue(body.find(playground.name) >= 0)
Example #44
0
    def test_process_updates_simple(self):
        utils.load_test_playgrounds()

        updated_playgrounds, revision_group = data.process_changes(
            'tests/data/test_updates_simple.json')

        self.assertEqual(len(updated_playgrounds), 1)

        playground = Playground.select().where(
            Playground.id == updated_playgrounds[0].id)[0]
        self.assertEqual(playground.id, 1)
        self.assertEqual(playground.name, 'NEW NAME')

        revisions = Revision.select().where(
            Revision.revision_group == revision_group)

        self.assertEqual(revisions.count(), 1)

        revision = revisions[0]
        self.assertEqual(revision.playground.id, playground.id)

        log = revision.get_log()
        self.assertEqual(len(log), 2)
        self.assertEqual(log[0]['field'], 'name')
        self.assertEqual(log[0]['from'], 'Strong Reach Playground')
        self.assertEqual(log[0]['to'], 'NEW NAME')
        self.assertEqual(log[1]['field'], 'smooth-surface-throughout')
        self.assertEqual(log[1]['from'], 1)
        self.assertEqual(log[1]['to'], 0)

        headers = revision.get_headers()
        self.assertEqual(headers['content_length'], '18')
        self.assertEqual(headers['host'], 'localhost')

        cookies = revision.get_cookies()
        self.assertEqual(len(cookies), 0)
Example #45
0
 def get(self):
     revisions = Revision.all().order('-date')
     self.render('recent.jinja', revisions=revisions)
Example #46
0
def _prepare_email(revision_group):
    revisions = Revision.select().where(
        Revision.revision_group == int(revision_group))

    context = {}
    context['base_url'] = '%s/playground/' % app_config.S3_BASE_URL
    context['total_revisions'] = revisions.count()
    context['deletes'] = {}
    context['deletes']['playgrounds'] = []
    context['deletes']['total_revisions'] = 0

    context['inserts'] = {}
    context['inserts']['playgrounds'] = []
    context['inserts']['total_revisions'] = 0

    context['updates'] = {}
    context['updates']['playgrounds'] = []
    context['updates']['total_revisions'] = 0

    inserts = revisions.where(Revision.action == 'insert')
    if inserts.count() > 0:
        context['inserts']['total_revisions'] = inserts.count()
        for revision in inserts:
            p = Playground.get(slug=revision.playground.slug)
            playground_dict = p.__dict__['_data']
            playground_dict['display_name'] = p.display_name
            playground_dict['site_url'] = '%s/playground/%s.html' % (
                app_config.S3_BASE_URL, revision.playground.slug)
            playground_dict['revision_group'] = int(revision_group)
            playground_dict['headers'] = revision.get_headers()
            playground_dict['feature_count'] = int(p.feature_count)
            nearby = p.nearby(3)
            playground_dict['nearby'] = []
            for n in nearby:
                if n.distance < 0.5:
                    playground_dict['nearby'].append(n)
            context['inserts']['playgrounds'].append(playground_dict)
        context['inserts']['playgrounds'] = sorted(
            context['inserts']['playgrounds'], key=lambda p: p['name'])

    deletes = revisions.where(Revision.action == 'delete-request')
    if deletes.count() > 0:
        context['deletes']['total_revisions'] = deletes.count()
        for revision in deletes:
            p = Playground.get(slug=revision.playground.slug)
            playground_dict = playground_dict = p.__dict__['_data']
            playground_dict['display_name'] = p.display_name
            playground_dict['site_url'] = '%s/playground/%s.html' % (
                app_config.S3_BASE_URL, revision.playground.slug)
            playground_dict['delete_url'] = '%s/delete-playground/%s/' % (
                app_config.SERVER_BASE_URL, revision.playground.slug)
            playground_dict['revision_group'] = int(revision_group)
            for item in json.loads(revision.log):
                if item.get('field', None) == "reason":
                    playground_dict['text'] = cgi.escape(item.get('to'))
            playground_dict['headers'] = revision.get_headers()
            context['deletes']['playgrounds'].append(playground_dict)
        context['deletes']['playgrounds'] = sorted(
            context['deletes']['playgrounds'], key=lambda p: p['name'])

    updates = revisions.where(Revision.action == 'update')
    if updates.count() > 0:
        context['updates']['total_revisions'] = updates.count()
        updated_playgrounds = Set([])

        for revision in updates:
            updated_playgrounds.add(revision.playground.slug)

        for playground_slug in updated_playgrounds:
            p = Playground.get(slug=playground_slug)
            playground_dict = p.__dict__['_data']
            playground_dict['display_name'] = p.display_name
            playground_dict['site_url'] = '%s/playground/%s.html' % (
                app_config.S3_BASE_URL, playground_slug)
            playground_dict['revisions'] = []
            for revision in updates:
                if revision.playground.id == p.id:
                    revision_dict = {}
                    revision_dict['revision_group'] = revision_group
                    revision_dict['fields'] = revision.get_log()
                    revision_dict['headers'] = revision.get_headers()
                    playground_dict['revisions'].append(revision_dict)

            context['updates']['playgrounds'].append(playground_dict)
        context['updates']['playgrounds'] = sorted(
            context['updates']['playgrounds'], key=lambda p: p['name'])

    with open('templates/_email.html', 'rb') as read_template:
        payload = Template(read_template.read())

    return payload.render(**context)
Example #47
0
def get_all_revs():
    #top 50 revisions, to be fine-tuned according to users course, university, etc
    #also gives some stats, etc e.g. 23 qs, 500 attempts,etc
    revs = Revision.all().fetch(50)
    return revs
Example #48
0
File: file.py Project: sqba/zentxt
 def get_revisions(self, file):
     query = Revision.gql("WHERE file = :1 ORDER BY date DESC", file)
     #.filter('__key__ != :1', file.head.key())
     return query.fetch(100)
Example #49
0
def changes():
    page = max(1, request.args.get('page', type=int))
    query = Revision.all().order('-timestamp')
    return web.render_template('changes.html',
        pagination=Pagination(query, 20, page, 'changes'))
Example #50
0
def _prepare_email(revision_group):
    revisions = Revision.select().where(Revision.revision_group == int(revision_group))

    context = {}
    context['base_url'] = '%s/playground/' % app_config.S3_BASE_URL
    context['total_revisions'] = revisions.count()
    context['deletes'] = {}
    context['deletes']['playgrounds'] = []
    context['deletes']['total_revisions'] = 0

    context['inserts'] = {}
    context['inserts']['playgrounds'] = []
    context['inserts']['total_revisions'] = 0

    context['updates'] = {}
    context['updates']['playgrounds'] = []
    context['updates']['total_revisions'] = 0

    inserts = revisions.where(Revision.action == 'insert')
    if inserts.count() > 0:
        context['inserts']['total_revisions'] = inserts.count()
        for revision in inserts:
            p = Playground.get(slug=revision.playground.slug)
            playground_dict = p.__dict__['_data']
            playground_dict['display_name'] = p.display_name
            playground_dict['site_url'] = '%s/playground/%s.html' % (app_config.S3_BASE_URL, revision.playground.slug)
            playground_dict['revision_group'] = int(revision_group)
            playground_dict['headers'] = revision.get_headers()
            playground_dict['feature_count'] = int(p.feature_count)
            nearby = p.nearby(3)
            playground_dict['nearby'] = []
            for n in nearby:
                if n.distance < 0.5:
                    playground_dict['nearby'].append(n)
            context['inserts']['playgrounds'].append(playground_dict)
        context['inserts']['playgrounds'] = sorted(context['inserts']['playgrounds'], key=lambda p: p['name'])

    deletes = revisions.where(Revision.action == 'delete-request')
    if deletes.count() > 0:
        context['deletes']['total_revisions'] = deletes.count()
        for revision in deletes:
            p = Playground.get(slug=revision.playground.slug)
            playground_dict = playground_dict = p.__dict__['_data']
            playground_dict['display_name'] = p.display_name
            playground_dict['site_url'] = '%s/playground/%s.html' % (app_config.S3_BASE_URL, revision.playground.slug)
            playground_dict['delete_url'] = '%s/delete-playground/%s/' % (app_config.SERVER_BASE_URL, revision.playground.slug)
            playground_dict['revision_group'] = int(revision_group)
            for item in json.loads(revision.log):
                if item.get('field', None) == "reason":
                    playground_dict['text'] = cgi.escape(item.get('to'))
            playground_dict['headers'] = revision.get_headers()
            context['deletes']['playgrounds'].append(playground_dict)
        context['deletes']['playgrounds'] = sorted(context['deletes']['playgrounds'], key=lambda p: p['name'])

    updates = revisions.where(Revision.action == 'update')
    if updates.count() > 0:
        context['updates']['total_revisions'] = updates.count()
        updated_playgrounds = Set([])

        for revision in updates:
            updated_playgrounds.add(revision.playground.slug)

        for playground_slug in updated_playgrounds:
            p = Playground.get(slug=playground_slug)
            playground_dict = p.__dict__['_data']
            playground_dict['display_name'] = p.display_name
            playground_dict['site_url'] = '%s/playground/%s.html' % (app_config.S3_BASE_URL, playground_slug)
            playground_dict['revisions'] = []
            for revision in updates:
                if revision.playground.id == p.id:
                    revision_dict = {}
                    revision_dict['revision_group'] = revision_group
                    revision_dict['fields'] = revision.get_log()
                    revision_dict['headers'] = revision.get_headers()
                    playground_dict['revisions'].append(revision_dict)

            context['updates']['playgrounds'].append(playground_dict)
        context['updates']['playgrounds'] = sorted(context['updates']['playgrounds'], key=lambda p: p['name'])

    with open('templates/_email.html', 'rb') as read_template:
        payload = Template(read_template.read())

    return payload.render(**context)
Example #51
0
def svg_images(request):
    defs_elms = []
    arts = []
    project_uuid = request.POST.get('project-uuid')
    project = Project.objects.get(uuid=project_uuid, email=request.session['email'])
    project_name = project.project
    redirection = '/exegesis/projects'
    artboards = ArtBoard.objects.filter(project__project__contains=project_name)
    for artboard in artboards:
        arts.append(artboard.artboard)
    images_path = os.path.join('parse_svg', 'templates', 'uploads')
    if not os.path.exists(images_path):
        os.makedirs(images_path)
    for f in request.FILES.getlist('svgfile'):
        filename = f.name
        print 'filename: ', filename
        if filename.endswith('zip'):
            archive = zipfile.ZipFile(f)
            for file in archive.namelist():
                print 'file: ', file
                if file.endswith('svg'):
                    img_data = archive.read(file)
                    uuid_name = uuid.uuid4()
                    img_name = "%s.%s" % (uuid_name, 'svg')
                    image_path = 'uploads/' + img_name
                    url = image_path
                    with open(os.path.join(images_path, img_name), "wb") as image:
                        image.write(img_data)
                    if '/' in file:
                        file = file.split('/')[1]

                    tree = ET.parse(os.path.join(settings.BASE_DIR, 'parse_svg', 'templates') + '/' + url)
                    root = tree.getroot()
                    for child in root.iter():
                        if child.tag.split('}')[1] == 'defs':
                            for subchild in child.iter():
                                defs_elms.append(subchild)
                    for child in root.iter():
                        if child not in defs_elms:
                            attribute = child.attrib
                            if 'id' in attribute:
                                elem_id = check_for_id()
                                child.set('id', elem_id)
                            if child.tag.split('}')[1] == 'use' and 'id' not in attribute.keys() or \
                                                    child.tag.split('}')[1] == 'text' and 'id' not in attribute.keys():
                                elem_id = check_for_id()
                                child.set('id', elem_id)
                    tree.write(os.path.join(settings.BASE_DIR, 'parse_svg', 'templates') + '/' + url)

                    Project.objects.filter(project=project_name, email=request.user.email).update(thumbnail=url)
                    project = Project.objects.get(project=project_name, email=request.user.email)
                    file = file.split('.')[0]
                    if file in arts:
                        old_art = ArtBoard.objects.get(artboard=file, project__project__contains=project_name,
                                                       latest=True)
                        ArtBoard.objects.filter(artboard=file, project__project__contains=project_name).update(
                            latest=False, last_updated=datetime.now())
                        revision_entry = Revision(name=file, artboard=old_art)
                        revision_entry.save()
                    new_entry = ArtBoard(project=project, artboard=file, location=url, uuid=uuid_name, latest=True,
                                         created=datetime.now(), last_updated=datetime.now())
                    new_entry.save()
                    Project.objects.filter(project=project_name).update(last_updated=datetime.now())
        else:
            img_data = f.read()
            uuid_name = uuid.uuid4()
            img_name = "%s.%s" % (uuid_name, 'svg')
            image_path = 'uploads/' + img_name
            url = image_path
            with open(os.path.join(images_path, img_name), "wb") as image:
                image.write(img_data)
            tree = ET.parse(os.path.join(settings.BASE_DIR, 'parse_svg', 'templates') + '/' + url)
            root = tree.getroot()
            for child in root.iter():
                if child.tag.split('}')[1] == 'defs':
                    for subchild in child.iter():
                        defs_elms.append(subchild)
            for child in root.iter():
                if child not in defs_elms:
                    attribute = child.attrib
                    if 'id' in child.attrib:
                        elem_id = check_for_id()
                        child.set('id', elem_id)
                    if child.tag.split('}')[1] == 'use' and 'id' not in attribute.keys() or child.tag.split('}')[
                        1] == 'text' and 'id' not in attribute.keys():
                        elem_id = check_for_id()
                        child.set('id', elem_id)
            tree.write(os.path.join(settings.BASE_DIR, 'parse_svg', 'templates') + '/' + url)
            Project.objects.filter(project=project_name, email=request.user.email).update(thumbnail=url)
            project = Project.objects.get(project=project_name, email=request.user.email)
            filename = filename.split('.')[0]
            if filename in arts:
                old_art = ArtBoard.objects.get(artboard=filename, project__project__contains=project_name, latest=True)
                ArtBoard.objects.filter(artboard=filename, project__project__contains=project_name).update(latest=False,
                                                                                                           last_updated=datetime.now())
                revision_entry = Revision(name=filename, artboard=old_art)
                revision_entry.save()
            new_entry = ArtBoard(project=project, artboard=filename, location=url, uuid=uuid_name, latest=True,
                                 created=datetime.now(), last_updated=datetime.now())
            new_entry.save()
            Project.objects.filter(project=project_name).update(last_updated=datetime.now())
    return redirect(redirection)
Example #52
0
File: file.py Project: sqba/zentxt
 def get_revisions(self, file):
     query = Revision.gql("WHERE file = :1 ORDER BY date DESC", file)
     #.filter('__key__ != :1', file.head.key())
     return query.fetch(100)
Example #53
0
 def get(self):
     revisions = Revision.all().order('-date')
     self.render('recent.jinja', revisions=revisions)
Example #54
0
def get_lect_revs(user):
    revs = Revision.gql('WHERE user=:1',user).fetch(50)
    return revs