vendredi 20 novembre 2015

Writing clean code: Nested For/If/Elif in Pyramid

I have been trying to cleanly write a for loop that includes conditionals to print 1. user results and 2. if user results do not exist, print pending assessments (tasks).

I'm currently taking this thing for a loop without end result (meaning I cannot figure this out). Essentially the goal is: So a user can know what they have completed and what remains to be done.

Currently all_assessments prints out a list of all the existing assessment names and text.

all_assessments = [<Assessment(name='Becoming a Leader', text='better decisions')>, <Assessment(name='Good work', text='working on these skills')>, <Assessment(name='Teaching NTS', text='Series 1.1')>]

while all_results prints out all results of every user in a list. Shown here:

all_results [<Assessment_Result(owner='<User(username ='baseball', password='...', firstname ='Jenny', lastname ='Jen', email='dance@aol.com')>', assessment='<Assessment(name='Becoming a Leader', text='better decisions')>')>, <Assessment_Result(owner='<User(username ='donald', password='...', firstname ='Drew', lastname ='James', email='cool@gmail.com')>', assessment='<Assessment(name='Good work', text='working on these skills')>')>]

and finally, user_results prints results found by username (which is based on whomever is logged in).

retrieved by username: [<Assessment_Result(owner='<User(username ='dorisday', password='..', firstname ='Doris', lastname ='Day', email='dorisday@gmail.com')>', assessment='<Assessment(name='Becoming a Leader', text='better decisions')>')>, <Assessment_Result(owner='<User(username ='dorisday', password='..', firstname ='Doris', lastname ='Day', email='dorisday@gmail.com')>', assessment='<Assessment(name='Good work', text='working on these skills')>')>]


Views.py

    def view_assessments(request):
        owner = authenticated_userid(request)
        print 'login owner', owner
        if owner is None:
            raise HTTPForbidden()
        all_assessments = api.retrieve_assessments()
        print 'these are all the assessments:', all_assessments
        print 'and type:', type(all_assessments)
        all_results = api.retrieve_assessment_results() # all the assessment results in a list

        user_results = api.retrieve_assessment_byusername(owner) #all completed results of user
        for x in all_assessments:
            print 'all assessments', x
        for a in user_results:
            #print 'Done ', a.assessment # seperates each result (assessment object)
            done = a.assessment.name
            if done is not None: #length greater than zero
                print 'done', done
            else:
                print 'pending', x #doesn't work: supposed to print remaining assessments

        return {'assessments': all_assessments, 'assessment_results': all_results, 'loggedin': owner, 'user_results': user_results}

Jinja2 Template

    <div class="container">
        <table class="table table-hover">
            <thead class='tablename'>
                <h2> Pending Assessments </h2>
                <tr>
                    <td>  </td> <!--blank on purpose-->
                    <td> Assessment </td>
                    <td> Details </td>
                </tr>
            </thead>
            <tbody>
                <tr>
                {% for a in assessments|sort(attribute='id') %}
                        <td><a href="{{ '/assessments/%s'%a.id|urlencode }}"><button type='button' class='btn btn-primary btn-default'> Start</button></a></td>
                    <td>{{ a.name }}</td>
                        <td><i>{{ a.text }}</i></td>
                </tr>
                {% endfor %}
            </tbody>
            </table>
        </div>
        <div class="container">
            <table class="table table-striped">
                <thead class='tablename'>
                    <h2>Completed Assessments</h2>
                    <tr>
                        <td> Assessment </td>
                        <td> Details </td>
                        <td> Date </td>
                    </tr>
                </thead>
                <tbody>
                    <tr>
        {% for x in assessment_results|sort(attribute='id') %}
                {% if x.owner.username == loggedin  %}
                    <td>{{ x.assessment.name  }}</td>
                    <td><i>{{ x.assessment.text  }}<i></td>
                    <td>{{ x.created_on  }}</td>
                </tr>
            {% endif %}
        {% endfor %}
    </tbody>
    </table>
</div>

Aucun commentaire:

Enregistrer un commentaire