Daily Bruin's Twitter and Facebook post scheduler
- Docker is our way of putting the code for meow in "containers" so you can run it the same on any machine.
- React is a popular JavaScript library for building user interfaces.
- Redux is a library for maintaining a global state across the entire frontend.
- Django is a Web framework that makes working with databases easier!
- Celery is a task scheduler that runs certain "tasks" at certain intervals.
.
├── Dockerfile
├── LICENSE
├── Procfile
├── Procfile.dev
├── docker-compose.yml
├── entrypoint.sh
├── meow
│ ├── manage.py
│ ├── frontend
│ └── src
│ ├── meow
│ └── settings.py
│ ├── scheduler
│ ├── ... all other django apps
│ ├── static
│ └── templates
├── readme.md
└── requirements.txt
Clone the repository.
git clone https://github.com/daily-bruin/meow.git
cd meow
To make this whole process easier, we have a script which will run all the steps except npm run watch
. Note: the script may pause at certain points to prompt you for secrets or environment variables. If you are part of Daily Bruin, ask the Internal Tools Editor for these values since we have accounts for those set up already.
./init_script.sh
If you get an error saying cannot connect to docker daemon, you may need to run docker commands with sudo
. Try calling the sudo version of the init_script.
./sudo_init_script.sh # Only run if the ./init_script.sh did not work.
Once you run this, just run docker-compose up
in one terminal tab and npm run watch
in another. Then go to
localhost:5000
and you should see 1 of several random cats pics :D (and the login page). Now you are done and you can skip all the other steps.
Since the redesign for meow is done with React, we need a way to compiled all that code into something that Django can recognize and (more importantly) serve to our user!
First, increase max inotify watchers.
Then, open up a separate Terminal run the command:
npm run watch
npm run watch
will recompile the code everytime you make a change! If you don't like this, you can also
run npm run build
every time you change your code.
Point your browser to localhost:5000
. Login with your Daily Bruin slack.
Navigate to localhost:5000/manage/
, and click
on "Twitter/Facebook accounts". Make sure you're an admin for the Facebook page
you want to connect to and click "Connect with Facebook"! Follow the steps on
when you're redirected to Facebook. At the end, you will be prompted to choose a
section and a page. Click on the dropdown for "Choose a section" and click on
the section Test
. Then click on the dropdown for "Choose a
page" and click on the Facebook page you want to connect to. Once you click
"Connect," you can send posts to Facebook with meow!
The next step is to connect your Twitter account to meow. Head back to
localhost:5000/manage/
. Ensure that you're
logged in to the Twitter account you wish to post to or else you might end up
posting to your personal Twitter! Click "Connect with Twitter" and then
"Authorize app." When prompted to "Choose a section," select Test
.
After clicking "Connect," you can begin sending meow posts Twitter.
At localhost:5000
, you can begin sending meows.
Click "New" in the top right, and fill in the fields. A slug is a relatively
unique string used in the newsroom to identify stories in production (e.g., a
story about cats could be called news.breaking.meowisdown
).
Superusers have access to Django's admin side. The admin side allows you to access most of the database through a nice UI.
docker-compose run web meow/manage.py createsuperuser
You can use any email and password. For example, you can set username=admin
, email=a@a.com
, and password=admin123
.
Then navigate to localhost:5000/admin/
. THE TRAILING SLASH IS REQUIRED. Login with the username
and password from the previous step and now you can access the admin side.
In Django, if you want to add fields to your database,
you would add a field to the corresponding model (each of which represents a table) in models.py
.
Once you finish adding your attributes, you will need to run makemigrations
so django
will create code to update the underlying database table headers appropriately.
docker-compose run web meow/manage.py makemigrations # django makes a script to update database headers
docker-compose run web meow/manage.py migrate # django runs all those scripts it made
docker-compose up --build
The manage.py shell
allows you to run any python code in an interactive shell!
In order to access this shell, run docker-compose run web ./meow/manage.py shell
. Then a prompt like this should show:
Python 3.6.9 (default, Nov 15 2019, 03:26:27)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
- Create SMPost (or an instance of any model)
>>> from scheduler.models import *
>>> p =SMPost.objects.create(slug="test")
>>> print(p)
test
>>>
- Get all SMPosts (or an instance of any model)
>>> from scheduler.models import *
>>> posts =SMPost.objects.all()
>>> print(posts)
<QuerySet [<SMPost: test>, <SMPost: test>, <SMPost: a>, <SMPost: b>, <SMPost: test>]>
- Find and delete a particular SMPosts (or an instance of any model)
>>> from scheduler.models import *
>>> post = SMPost.objects.get(id=number_in_the_url_in_the_edit_meow_page)
>>> post.delete()
We use a combination of eslint and prettier for our linting and code formatting.
With a few exceptions, we follow the Airbnb JavaScript guide.
Meow is released under GNU AGPLv3. See LICENSE
for more details.
Though not required, if you use this software or would like to contribute to its development, please let us know by emailing us at online@media.ucla.edu. We'd love to know what it's being used for, especially if it's at another college newspaper.