Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
course-discovery
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
course-discovery
Commits
13d80568
Commit
13d80568
authored
Nov 03, 2017
by
Hasnain
Committed by
Hasnain Naveed
Dec 22, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WL-1295 | Added management command to create the sites and their partners.
parent
7323f313
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
211 additions
and
0 deletions
+211
-0
course_discovery/apps/core/management/commands/create_sites_and_partners.py
+97
-0
course_discovery/apps/core/management/commands/tests/sandbox_configuration.json
+16
-0
course_discovery/apps/core/management/commands/tests/test_create_sites_and_partners.py
+98
-0
No files found.
course_discovery/apps/core/management/commands/create_sites_and_partners.py
0 → 100644
View file @
13d80568
""" Creates sites and partners """
import
fnmatch
import
json
import
logging
import
os
from
django.contrib.sites.models
import
Site
from
django.core.management
import
BaseCommand
from
course_discovery.apps.core.models
import
Partner
logger
=
logging
.
getLogger
(
__name__
)
class
Command
(
BaseCommand
):
"""
Creates Partners and their perspective Sites.
"""
dns_name
=
None
theme_path
=
None
def
add_arguments
(
self
,
parser
):
parser
.
add_argument
(
"--dns-name"
,
type
=
str
,
help
=
"Enter DNS name of sandbox."
,
required
=
True
)
parser
.
add_argument
(
"--theme-path"
,
type
=
str
,
help
=
"Enter theme directory path"
,
required
=
True
)
def
find
(
self
,
pattern
,
path
):
"""
Matches the given pattern in given path and returns the list of matching files.
"""
result
=
[]
for
root
,
_
,
files
in
os
.
walk
(
path
):
for
name
in
files
:
if
fnmatch
.
fnmatch
(
name
,
pattern
):
result
.
append
(
os
.
path
.
join
(
root
,
name
))
return
result
def
_get_site_partner_data
(
self
):
"""
Reads the json files from theme directory and returns the site partner data in JSON format.
"""
site_data
=
{}
for
config_file
in
self
.
find
(
'sandbox_configuration.json'
,
self
.
theme_path
):
logger
.
info
(
"Reading file from {file_name}"
.
format
(
file_name
=
config_file
))
configuration_data
=
json
.
loads
(
json
.
dumps
(
json
.
load
(
open
(
config_file
)
)
)
.
replace
(
"{dns_name}"
,
self
.
dns_name
)
)[
'discovery_configuration'
]
site_data
[
configuration_data
[
'site_partner'
]]
=
{
"site_domain"
:
configuration_data
[
'site_domain'
],
"partner_data"
:
configuration_data
[
'partner_data'
]
}
return
site_data
def
handle
(
self
,
*
args
,
**
options
):
"""
Creates sites and partners.
"""
self
.
dns_name
=
options
[
'dns_name'
]
self
.
theme_path
=
options
[
'theme_path'
]
logger
.
info
(
"DNS name: '{dns_name}'"
.
format
(
dns_name
=
self
.
dns_name
))
logger
.
info
(
"Theme path: '{theme_path}'"
.
format
(
theme_path
=
self
.
theme_path
))
all_sites
=
self
.
_get_site_partner_data
()
for
site_partner
,
site_partner_data
in
all_sites
.
items
():
partner_data
=
site_partner_data
[
'partner_data'
]
logger
.
info
(
"Creating '{site}' Site"
.
format
(
site
=
site_partner
))
site
,
_
=
Site
.
objects
.
get_or_create
(
domain
=
site_partner_data
[
'site_domain'
],
defaults
=
{
"name"
:
site_partner
}
)
logger
.
info
(
"Successfully created {site} site"
.
format
(
site
=
site_partner
))
partner_data
[
'site'
]
=
site
logger
.
info
(
"Creating '{partner}' Partner"
.
format
(
partner
=
site_partner
))
Partner
.
objects
.
get_or_create
(
short_code
=
site_partner
,
defaults
=
partner_data
)
logger
.
info
(
"Successfully created {partner} Partner"
.
format
(
partner
=
site_partner
))
course_discovery/apps/core/management/commands/tests/sandbox_configuration.json
0 → 100644
View file @
13d80568
{
"discovery_configuration"
:{
"site_domain"
:
"discovery-dummy-{dns_name}.example.com"
,
"site_partner"
:
"dummy"
,
"partner_data"
:
{
"name"
:
"dummy"
,
"oidc_key"
:
"key-dummy"
,
"studio_url"
:
"https://studio-dummy-{dns_name}.example.com"
,
"oidc_secret"
:
"secret-{dns_name}"
,
"oidc_url_root"
:
"https://dummy-{dns_name}.example.com/oauth2"
,
"courses_api_url"
:
"https://dummy-{dns_name}.example.com/api/courses/v1/"
,
"ecommerce_api_url"
:
"https://ecommerce-dummy-{dns_name}.example.com/"
,
"organizations_api_url"
:
"https://dummy-{dns_name}.example.com/api/organizations/v0/"
}
}
}
course_discovery/apps/core/management/commands/tests/test_create_sites_and_partners.py
0 → 100644
View file @
13d80568
from
__future__
import
unicode_literals
import
os
from
django.contrib.sites.models
import
Site
from
django.core.management
import
CommandError
,
call_command
from
django.test
import
TestCase
from
course_discovery.apps.core.models
import
Partner
SITES
=
[
'dummy-site'
]
class
CreateSitesAndPartnersTests
(
TestCase
):
""" Test the create_sites_and_partners command """
def
setUp
(
self
):
super
(
CreateSitesAndPartnersTests
,
self
)
.
setUp
()
self
.
dns_name
=
"dummy-dns"
self
.
theme_path
=
os
.
path
.
dirname
(
__file__
)
def
_assert_site_and_partner_are_valid
(
self
):
"""
checks that all the sites and partners are valid.
"""
sites
=
Site
.
objects
.
all
()
partners
=
Partner
.
objects
.
all
()
# there is an extra default site.
self
.
assertEqual
(
len
(
sites
),
len
(
SITES
)
+
1
)
self
.
assertEqual
(
len
(
partners
),
len
(
SITES
))
for
site
in
sites
:
if
site
.
name
in
SITES
:
site_name
=
site
.
name
self
.
assertEqual
(
site
.
domain
,
"discovery-{site}-{dns_name}.example.com"
.
format
(
site
=
site_name
,
dns_name
=
self
.
dns_name
)
)
partner
=
Partner
.
objects
.
get
(
site
=
site
)
self
.
assertEqual
(
partner
.
short_code
,
site_name
)
self
.
assertEqual
(
partner
.
name
,
"dummy"
)
self
.
assertEqual
(
partner
.
oidc_key
,
"key-dummy"
)
self
.
assertEqual
(
partner
.
oidc_secret
,
"secret-{dns_name}"
.
format
(
dns_name
=
self
.
dns_name
))
self
.
assertEqual
(
partner
.
oidc_url_root
,
"https://dummy-{dns_name}.example.com/oauth2"
.
format
(
dns_name
=
self
.
dns_name
)
)
self
.
assertEqual
(
partner
.
courses_api_url
,
"https://dummy-{dns_name}.example.com/api/courses/v1/"
.
format
(
dns_name
=
self
.
dns_name
)
)
self
.
assertEqual
(
partner
.
ecommerce_api_url
,
"https://ecommerce-dummy-{dns_name}.example.com/"
.
format
(
dns_name
=
self
.
dns_name
)
)
self
.
assertEqual
(
partner
.
organizations_api_url
,
"https://dummy-{dns_name}.example.com/api/organizations/v0/"
)
def
test_missing_required_arguments
(
self
):
"""
Verify CommandError is raised when required arguments are missing.
"""
# If a required argument is not specified the system should raise a CommandError
with
self
.
assertRaises
(
CommandError
):
call_command
(
"create_sites_and_partners"
,
"--dns-name"
,
self
.
dns_name
,
)
with
self
.
assertRaises
(
CommandError
):
call_command
(
"create_sites_and_partners"
,
"--theme-path"
,
self
.
theme_path
,
)
def
test_create_site_and_partner
(
self
):
"""
Verify that command creates sites and Partners
"""
call_command
(
"create_sites_and_partners"
,
"--dns-name"
,
self
.
dns_name
,
"--theme-path"
,
self
.
theme_path
)
self
.
_assert_site_and_partner_are_valid
()
call_command
(
"create_sites_and_partners"
,
"--dns-name"
,
self
.
dns_name
,
"--theme-path"
,
self
.
theme_path
)
# if we run command with same dns then it will not duplicates the sites and partners.
self
.
_assert_site_and_partner_are_valid
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment