Giter VIP home page Giter VIP logo

wouso's Introduction

Build Status Coverage Status Code Climate

World of USO

World of USO is a quiz game framework. It has been used since 2007 as a support game for the Introduction to Operating Systems class (USO) by 1st year students at the Faculty of Automatic Control and Computers, University POLITEHNICA of Bucharest.

Easy install

On a Mint/Ubuntu/Fedora system run the install script:

./install.sh

During the installation you will be asked to enter an username and password for the administrative user. You will use those to do the first login into World of USO and use full privileges for administrative actions.

If everything installs successfully go to step 9 to start the server.

Requirements

The following packages need to be installed:

  • python2.7
  • python-pip
  • python-django
  • python-dev
  • python-virtualenv
  • libldap2-dev
  • libsasl2-dev
  • libssl-dev

On Debian-based systems run the command:

sudo apt-get install python2.7 python-pip python-django python-dev python-virtualenv libldap2-dev libsasl2-dev libssl-dev

On Fedora 22 or higher systems run the command:

sudo dnf -y install python-pip python-django python-devel python-virtualenv openldap-devel libgsasl-devel openssl-devel

On Fedora 21 or lower systems run the command:

sudo yum -y install python-pip python-django python-devel python-virtualenv openldap-devel libgsasl-devel openssl-devel

Optional packages (in case of MySQL support):

  • mysql-server
  • mysql-client
  • libmysqlclient-dev

Installing WoUSO

  1. Fork/Clone the WoUSO repository from GitHub.

  2. Browse to the Git repository and activate the virtualenv:

     cd $PATH_TO_WOUSO_REPOSITORY
     virtualenv -p python2.7 sandbox
     source sandbox/bin/activate
    

    $PATH_TO_WOUSO_REPOSITORY is the location of the clone of the WoUSO repository.

    You'll notice it works as you get a prompt update: the (sandbox) string is prefixed to the prompt. Something like:

     (sandbox)wouso@wouso-dev:~/wouso.git$
    

    In case you do something wrong in the virtualenv, you may exit it using

     deactivate
    

    and you may then remove the sandbox folder:

     rm -r sandbox
    
  3. Install pip requirements while in the $PATH_TO_WOUSO_REPOSITORY folder:

     pip install -r requirements-pip
     pip install -r requirements-extra
    
  4. Install django-piston for WoUSO REST API (by hand, because of a weird bug):

     curl 'https://pypi.python.org/packages/source/d/django-piston/django-piston-0.2.3.tar.gz' | tar xzf -
     cd django-piston-0.2.3; python setup.py install
     cd ..; rm -r django-piston-0.2.3
    
  5. Go to wouso subfolder, run everything from there:

     cd wouso/
    
  6. Create initial settings. First make a copy of example settings:

     cp settings.py.example settings.py
    

    and edit the new file (settings.py). You may want to update the DATABASES setting (see next step).

  7. (optional) In case you want to use a MySQL database, you must have the MySQL server and client packages installed. For MySQL support in Python you can use pip:

     pip install MySQL-python
    

    Create the database and use and use appropriate settings. For example, one would issue these commands in the MySQL client prompt to create a database:

     create database wouso default character set utf8 default collate utf8_general_ci;
     create user 'wouso'@'localhost' identified by 'some_pass';
     grant all privileges on wouso.* to 'wouso'@'localhost';
     flush privileges;
    

    The appropriate database configuration in the settings.py file will then look like this:

     DATABASES = {
         'default': {
             'ENGINE': 'django.db.backends.mysql',
             'NAME': 'wouso',
             'USER': 'wouso',
             'PASSWORD': 'wouso',
             'HOST': 'localhost',
             'PORT': '',
         }
     }
    
  8. Create database tables and load initial data:

     ./manage.py wousoctl --setup
    

    You will be asked to enter an username and password for the administrative user. You will use those to do the first login into World of USO and use full privileges for administrative actions.

  9. Run the server:

     ./manage.py runserver
    

    By default the server listens for connections on localhost port 8000. In case you want the server to listen on all interfaces, run

     ./manage.py runserver 0.0.0.0:8000
    

    You can now point your browser to an URL such as http://localhost:8000 or http://<IP>:8000/ (where <IP> is the IP address of the host where you installed World of USO).

If you want to leave the virtualenv, run

deactivate

Development Virtual Machine

In case you run into issues when installing/configuring World of USO or you just want a quick development/testing environment, you can grab the development VM.

Using Vagrant

You may create a development environment using Vagrant. Make sure Vagrant is installed, then run

vagrant up

You can now find a deployed version of WoUSO at http://localhost:8000.

All code is shared with the VM, which you can access using

vagrant ssh

From there you can find the project files and interact with the django project as usual. This also generated a superuser admin:admin.

Development Best Practices

After pulling new code from server, while in sandbox mode, update the database schema by running the migration action:

./manage.py migrate

In case of issues, you may need to update the pip packages, by running the commands below while in the repository:

pip install -r requirements-pip
pip install -r requirements-extra

Troubleshooting

TemplateDoesNotExist at /admin/index.html

rsync -a -v --ignore-existing src dst

Where:

  • src is /yourvirtualenv/django/ (i.e. $PATH_TO_WOUSO_REPOSITORY/sandbox/django/)
  • dst is /yourvirtualenv/lib/python2.7/site-packages/django/ (i.e. $PATH_TO_WOUSO_REPOSITORY/sandbox/lib/python2.7/site-packages/django/)

wouso's People

Contributors

adrisal avatar alexef avatar badescunicu avatar camelia-groza avatar catalin-oancea avatar ciprianf avatar cvicentiu avatar daria-nedelcu avatar dianadespa avatar draganrelu avatar ds012012 avatar gabriel93 avatar givascu avatar ionel-popescu93 avatar ionutniculici avatar iulianr avatar jercaianu avatar lucianperju avatar mgax avatar mihneadb avatar mirhciulica avatar palcu avatar popadi avatar raztechs avatar razvanch avatar razvand avatar tiriplicamihai avatar tomyro avatar vladum avatar vladvoic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wouso's Issues

Special quest display

We need:
A game overview list of special quests (for archiving).
Show dates and time available even if the deadline passed.

Qproposal tags need category

Currently, there are 3 tags without parent in a fixture, used by qproposal. They must be grouped under the same category.

Activity API

do not use difficult selects in interface.views

Simulate challenge

Simulate challenge, and show possible results: minimum and maximum points earned from challenging an user, depending on self and opponent levels.

Example: Message "If you challenge a Level 5 player, you will gain 400 points, since you are Level 1"

Cast failed should display the real error

Currently, if a cast fails, it shows a generic message. It should give the reason, such us:

  • cast not permitted between Others and CA
  • destination is immune
  • you are cursed

MultipleObjectsReturned

After these commands
./manage.py syncdb
./manage.py wousoctl --setup
./manage.py loaddata v5.game.json

I started to get this error:
Caught MultipleObjectsReturned while rendering: get() returned more than one ArtifactGroup -- it returned 2! Lookup parameters were {'name': 'Default'}

Hook activity into chat

All messages shown in activity, should also be shown inside global chat window, eventually with a different formatting.

Example:

** alexef answered Qotd.

Autocomplete error on sender name.

When I try to compose a new message from message page, and put the name for sender, that name it's not auto-compiled and you will stay focus on that label.

Tests fail

........................................E.EEFFE...

ERROR: test_combine_messages (wouso.interface.chat.tests.ChatTestCase)

Traceback (most recent call last):
File "/home/alex/Proiecte/wouso-django/wouso/../wouso/interface/chat/tests.py", line 103, in test_combine_messages
self.test_message_send_more_message()
File "/home/alex/Proiecte/wouso-django/wouso/../wouso/interface/chat/tests.py", line 97, in test_message_send_more_message
self.assertEqual(last_mess[i].content, 'salut' + str(i))
File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 190, in getitem
return list(qs)[0]
IndexError: list index out of range

ERROR: test_message_send_manual (wouso.interface.chat.tests.ChatTestCase)

Traceback (most recent call last):
File "/home/alex/Proiecte/wouso-django/wouso/../wouso/interface/chat/tests.py", line 58, in test_message_send_manual
msg.save()
File "/usr/lib/python2.7/dist-packages/django/db/models/base.py", line 460, in save
self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/usr/lib/python2.7/dist-packages/django/db/models/base.py", line 553, in save_base
result = manager._insert(values, return_id=update_pk, using=using)
File "/usr/lib/python2.7/dist-packages/django/db/models/manager.py", line 195, in _insert
return insert_query(self.model, values, **kwargs)
File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 1436, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 791, in execute_sql
cursor = super(SQLInsertCompiler, self).execute_sql(None)
File "/usr/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 735, in execute_sql
cursor.execute(sql, params)
File "/usr/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 234, in execute
return Database.Cursor.execute(self, query, params)
IntegrityError: chat_chatmessage.messType may not be NULL

ERROR: test_message_send_more_message (wouso.interface.chat.tests.ChatTestCase)

Traceback (most recent call last):
File "/home/alex/Proiecte/wouso-django/wouso/../wouso/interface/chat/tests.py", line 97, in test_message_send_more_message
self.assertEqual(last_mess[i].content, 'salut' + str(i))
File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 190, in getitem
return list(qs)[0]
IndexError: list index out of range

ERROR: test_private_log_url (wouso.interface.chat.tests.ChatTestCase)

Traceback (most recent call last):
File "/home/alex/Proiecte/wouso-django/wouso/../wouso/interface/chat/tests.py", line 136, in test_private_log_url
self.assertEqual(private_log['count'], 10)
TypeError: 'NoneType' object has no attribute 'getitem'

FAIL: test_message_send_url (wouso.interface.chat.tests.ChatTestCase)

Traceback (most recent call last):
File "/home/alex/Proiecte/wouso-django/wouso/../wouso/interface/chat/tests.py", line 69, in test_message_send_url
self.assertEqual(len_now, len_after - 1)
AssertionError: 0 != -1

FAIL: test_message_send_url_private (wouso.interface.chat.tests.ChatTestCase)

Traceback (most recent call last):
File "/home/alex/Proiecte/wouso-django/wouso/../wouso/interface/chat/tests.py", line 82, in test_message_send_url_private
self.assertEqual(len(ChatMessage.objects.filter(destRoom__name=room['name'], destRoom__participants=self.user)), 1)
AssertionError: 0 != 1


Ran 51 tests in 7.217s

FAILED (errors=4, failures=2)
Destroying test database for alias 'default'...

Chat errors for anonymous

Chat shouldn't be loaded for anonymous pages.

[09/Sep/2012 05:16:47] "POST /chat/chat_m/ HTTP/1.1" 302 0
ERROR:root:'AnonymousUser' object has no attribute 'get_profile'
[09/Sep/2012 05:16:48] "GET /user/login/?next=/chat/chat_m/ HTTP

Cpanel bug

While not being logged in, try accessing /cpanel.

Instead of a login window, a server error is returned.

I'm willing to try and fix it.

Spell Bug

Spells name do not exist and when you want to put a spell on someone it doesn't work.

Bazaar/Magic/Spells cpanel

Allow:

  • disabling spells in the market
  • marking them temporary unavailable
  • spell crud
  • spell usage statistics (see other issue: #31)

Server administration docs

Write a section in the manual for the server admin, and document installation, repo/scripts/fastcgi.bash and cron.

Race top

Since the core refactoring, a race top isn't available (because Top History has a related_to field of PlayerGroup type, race won't fit there).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.